【问题标题】:How to create in memory XML document and get string out of it如何在内存中创建 XML 文档并从中获取字符串
【发布时间】:2011-02-09 08:56:03
【问题描述】:

我想创建带有特殊字符处理的 XML 字符串。然而事实证明它太复杂了,并通过生成错误的 XML 导致问题。 现在我正在考虑使用 System.xml 中的某个对象构建字符串,然后使用 stringify() 或从中获取字符串。我想这会帮助我解决特殊字符的情况。

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

doc.getXMLString();

谁能告诉我如何在 C# .NET2.0+ 中做到这一点。

【问题讨论】:

    标签: c# .net xml


    【解决方案1】:

    我发现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();
    }
    

    【讨论】:

    • 只是为了获得更多信息,我想知道如何使用 XmlDocument 来完成
    【解决方案2】:

    您也可以参考这个社区 wiki 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>
    

    【讨论】:

    • 此语法仅从.Net 3.5+开始可用,因为您需要参考当时引入的System.Xml.Linq。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多