2011-02-09 45 views
6

我想创建具有特殊字符处理的XML字符串。然而事实证明,这太复杂了,并且由于生成错误的XML而导致了问题。 现在我想使用System.xml中的某个对象构建字符串,然后stringify()或从中获取字符串。这将我猜想从特殊情况下帮助我。如何在内存中创建XML文档并获取字符串

//Psudo code 
xmlDoc doc = new XMLDoc(); 
Element ele= new Element("xyz"); 
ele.value(Oob.property) 
doc.appendNode(ele); 
... 

doc.getXMLString(); 

有人可以让我知道如何在C#.NET2.0 +中做到这一点。

回答

28

我发现XmlTextWriterXmlDocument更直观进行编辑。

例如为:

string xmlString = null; 
using(StringWriter sw = new StringWriter()) 
{ 
    XmlTextWriter writer = new XmlTextWriter(sw); 
    writer.Formatting = Formatting.Indented; // if you want it indented 

    writer.WriteStartDocument(); // <?xml version="1.0" encoding="utf-16"?> 
    writer.WriteStartElement("TAG"); //<TAG> 

    // <SUBTAG>value</SUBTAG> 
    writer.WriteStartElement("SUBTAG"); 
    writer.WriteString("value"); 
    writer.WriteEndElement(); 

    // <SUBTAG attr="hello">world</SUBTAG> 
    writer.WriteStartElement("SUBTAG"); 
    writer.WriteStartAttribute("attr"); 
    writer.WriteString("hello"); 
    writer.WriteEndAttribute(); 
    writer.WriteString("world"); 
    writer.WriteEndElement(); 

    writer.WriteEndElement(); //</TAG> 
    writer.WriteEndDocument(); 

    xmlString = sw.ToString(); 
} 

这个代码后xmlString将包含:

<?xml version="1.0" encoding="utf-16"?> 
<TAG> 
    <SUBTAG>value</SUBTAG> 
    <SUBTAG attr="hello">world</SUBTAG> 
</TAG> 

附加信息:

使用XmlDocument将是:


XmlDocument doc = new XmlDocument(); 

XmlNode tagNode = doc.CreateNode(XmlNodeType.Element, "TAG", null); 
doc.AppendChild(tagNode); 

XmlNode subTagNode1 = doc.CreateNode(XmlNodeType.Element, "SUBTAG", null); 
tagNode.AppendChild(subTagNode1); 
XmlText subTagNode1Value = doc.CreateTextNode("value"); 
subTagNode1.AppendChild(subTagNode1Value); 


XmlNode subTagNode2 = doc.CreateNode(XmlNodeType.Element, "SUBTAG", null); 
tagNode.AppendChild(subTagNode2); 
XmlAttribute subTagNode2Attribute = doc.CreateAttribute("attr"); 
subTagNode2Attribute.Value = "hello"; 

subTagNode2.Attributes.SetNamedItem(subTagNode2Attribute); 
XmlText subTagNode2Value = doc.CreateTextNode("world"); 
subTagNode2.AppendChild(subTagNode2Value); 

string xmlString = null; 
using(StringWriter wr = new StringWriter()) 
{ 
    doc.Save(wr); 
    xmlString = wr.ToString(); 
} 
+1

这是非常有用的感谢:) – 2011-02-09 10:06:29

+0

只是为了更多的信息我想知道它是如何做到使用XmlDocument的 – 2011-02-09 10:49:51

6

您也可以参考这个社区维基question,当你需要以编程方式构建XML流从而导致更容易阅读的语法。

然后,您可以调用.ToString()方法来获得XML流的干净转义表示形式。

var xmlString = new XElement("Foo", 
        new XAttribute("Bar", "some & value with special characters <>"), 
        new XElement("Nested", "data")).ToString(); 

而且你会得到的xmlString:

<Foo Bar="some &amp; value with special characters &lt;&gt;"> 
    <Nested>data</Nested> 
</Foo> 
相关问题