欢迎光临
我们一直在努力

XmlTransform 对xml中的特定名称空间的元素进行填充-.NET教程,XML应用

建站超值云服务器,限时71元/月

  

using system;

using system.xml;

namespace xmltest

{

 /// <summary>

 /// xmltransoform 的摘要说明。

 /// </summary>

 public class xmltransform

 {

  public xmltransform()

  {

   

  }

  public itagcontrol createcontrol(string nsuri,string tag,string innerxml)

  {

   return new simpletagcontrol(innerxml);

  }

  public string transform(string xml,string nsuri)

  {

   system.io.stringreader sr = new system.io.stringreader(xml);

   xmltextreader reader = new xmltextreader(sr);

   system.io.stringwriter sw = new system.io.stringwriter();

   xmltextwriter writer = new xmltextwriter(sw);

   writer.formatting=system.xml.formatting.indented;

   reader.read();

   while(!reader.eof)

   {

    if(reader.nodetype==xmlnodetype.element&&reader.namespaceuri==nsuri)

    {

     string localname=reader.localname;

     itagcontrol tc=createcontrol(nsuri,reader.localname,reader.readinnerxml());

     writer.writeraw(tc.render());

     //     reader.read(); reader.readinnerxml 已经进行的一次read

    }

    else

    {

     if(reader.nodetype==xmlnodetype.element)

     {   

      bool isempty=false;

      if(reader.isemptyelement)

      {

       isempty=true;

      }

      writer.writestartelement(reader.name);

      int count = reader.attributecount;

      for(int i=0;i<count;i++)

      {

       reader.movetoattribute(i);

       writer.writeattributestring(reader.name,reader.value);

      }

      if(isempty)

      {

       writer.writeendelement();

      }

      reader.read();

     }

     else

     {     

      writer.writenode(reader,true);

     }

    }

   }

   return sw.tostring();

  }

 }

}

————————————————-

using system;

using system.xml;

namespace xmltest

{

 /// <summary>

 /// simpletagcontrol 的摘要说明。

 /// </summary>

 public class simpletagcontrol: itagcontrol 

 {

 

  public simpletagcontrol()

  {

   

  }

 

  #region itagcontrol 成员

  public string render()

  {

   if(members==null||members.count==0)

    return innerxml;

   else

   {

    system.io.stringwriter w=new system.io.stringwriter();

    xmltextwriter xw=new xmltextwriter(w);

    foreach(object key in members.keys)

    {

     xw.writestartelement(key.tostring());

     xw.writestring(members[key].tostring());

     xw.writeendelement();

    }

    return w.tostring();

   }

  }  

  protected string innerxml;

  public string innerxml

  {

   get

   {

    return innerxml;

   }   

  }

  #endregion

 

  /// <input>innerxml</input>

  public simpletagcontrol(string innerxml)

  {

   init(innerxml);

  }

  private system.collections.sortedlist members;

  private void createmember(string key,string value)

  {

   if(members==null)

   {

    members=new system.collections.sortedlist();

   }

   if(members.containskey(key))

   { 

    members.add(key,value);

   }

   else

   {

    members[key]=value;

   }

  }

  private void init(string innerxml)

  {

   this.innerxml=innerxml;

   if(innerxml.startswith("<"))

   {

    system.io.stringreader sr = new system.io.stringreader(innerxml);

    xmltextreader reader = new xmltextreader(sr);

    while(reader.read())

    {

     if(reader.nodetype==xmlnodetype.text)

     {

      return;

     }

     if(reader.nodetype==xmlnodetype.element)

     {

      createmember(reader.localname,reader.readinnerxml());

     }

    }

   }

  }

 }

}

——————————–

[stathread]

  static void main(string[] args)

  {

   class1 c1=new class1();

   c1.transform();

   console.readline();  }

  public void transform()

  {

   string xml="<a xmlns:bb=\"http://ddd/\" xmlns:b=’ss’ key=\"keyname\"><bb:b a=’c’><a>aaa</a></bb:b><a as=’sdf’/><b:c key=\"dd\"><b xmlns=\"http://ddd1/\"><bb:h>hhh</bb:h></b></b:c><d>d1d1d1</d><e>eee</e></a>";

   xmltransform st=new xmltransform();

   console.writeline(st.transform(xml,@"http://ddd/"));   

  }

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » XmlTransform 对xml中的特定名称空间的元素进行填充-.NET教程,XML应用
分享到: 更多 (0)