XmlTransform 对xml中的特定名称空间的元素进行填充

using System;
using System.Xml;

namespace xmltest
{
///

1<summary>   
2/// XmlTransoform 的摘要说明。   
3/// </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

  1<count;i++) <summary="" \-------------------------------------------------="" else="" if(isempty)="" namespace="" reader.movetoattribute(i);="" reader.read();="" return="" sw.tostring();="" system.xml;="" system;="" using="" writer.writeattributestring(reader.name,reader.value);="" writer.writeendelement();="" writer.writenode(reader,true);="" xmltest="" {="" }="">   
  2/// SimpleTagControl 的摘要说明。   
  3///    
  4public class SimpleTagControl: ITagControl   
  5{   
  6  
  7public SimpleTagControl()   
  8{   
  9  
 10}   
 11  
 12#region ITagControl 成员 
 13
 14public string Render()   
 15{ 
 16
 17if(members==null||members.Count==0)   
 18return innerXml;   
 19else   
 20{   
 21System.IO.StringWriter w=new System.IO.StringWriter();   
 22XmlTextWriter xw=new XmlTextWriter(w);   
 23foreach(object key in members.Keys)   
 24{   
 25xw.WriteStartElement(key.ToString());   
 26xw.WriteString(members[key].ToString());   
 27xw.WriteEndElement();   
 28}   
 29return w.ToString();   
 30}   
 31}   
 32protected string innerXml;   
 33public string InnerXml   
 34{   
 35get   
 36{   
 37return innerXml;   
 38}   
 39} 
 40
 41#endregion   
 42  
 43/// <input/>innerXml   
 44public SimpleTagControl(string innerXml)   
 45{   
 46init(innerXml);   
 47}   
 48private System.Collections.SortedList members;   
 49private void createMember(string key,string value)   
 50{   
 51if(members==null)   
 52{   
 53members=new System.Collections.SortedList();   
 54}   
 55if(members.ContainsKey(key))   
 56{   
 57members.Add(key,value);   
 58}   
 59else   
 60{   
 61members[key]=value;   
 62}   
 63} 
 64
 65private void init(string innerXml)   
 66{   
 67this.innerXml=innerXml;   
 68if(innerXml.StartsWith("&lt;"))   
 69{   
 70System.IO.StringReader sr = new System.IO.StringReader(innerXml);   
 71XmlTextReader reader = new XmlTextReader(sr);   
 72while(reader.Read())   
 73{   
 74if(reader.NodeType==XmlNodeType.Text)   
 75{   
 76return;   
 77}   
 78if(reader.NodeType==XmlNodeType.Element)   
 79{   
 80createMember(reader.LocalName,reader.ReadInnerXml());   
 81}   
 82}   
 83}   
 84}   
 85}   
 86}   
 87\-------------------------------- 
 88
 89[STAThread]   
 90static void Main(string[] args)   
 91{   
 92Class1 c1=new Class1();   
 93c1.transform();   
 94Console.ReadLine(); }   
 95public void transform()   
 96{   
 97string xml="<a "="" \="" ddd="" http:="" key='\"keyname\"' xmlns:b="ss" xmlns:bb='\"'><bb:b a="c"><a>aaa</a></bb:b><a as="sdf"></a><b:c key='\"dd\"'><b \"="" ddd1="" http:="" xmlns='\"'><bb:h>hhh</bb:h></b></b:c><d>d1d1d1</d><e>eee</e></a>";   
 98XmlTransform st=new XmlTransform();   
 99Console.WriteLine(st.Transform(xml,@" http://ddd/ "));   
100} 
101
102\----------------------------------------------------- 
103
104欢迎就此问题进行评论,初步代码有待改进... 
105
106\--fallseir.li 2005.4.23 0:36</count;i++)>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus