【问题标题】:How To Write A String(XML Node formatted without root) as nodes using XMLWriter in C#?如何在 C# 中使用 XMLWriter 将字符串(无根格式的 XML 节点)作为节点编写?
【发布时间】:2016-04-29 12:19:31
【问题描述】:

我正在尝试使用 XMLWriter 将字符串(只不过是 XMLNodes)写入新的 XML 文件

XmlWriter writer = XmlWriter.Create(@"C:\\Test.XML")
writer.WriteStartDocument();
writer.WriteStartElement("Test");

string scontent = "<A a="Hello"></A><B b="Hello"></B>";
XmlReader content = XmlReader.Create(new StringReader(scontent));
writer.WriteNode(content, true);
//Here only my first node comes in the new XML but I want complete scontent
writer.WriteEndElement();

预期输出:

<Test>
<A a="Hello"></A>
<B b="Hello"></B>
</Test>

【问题讨论】:

  • 如果你想写string,为什么要使用XmlWriterFile.WriteAllText 应该可以正常工作。
  • @MikeStrobel 我无法使用 File.WriteAllText,因为我正在节点之间编写 XML 元素。谢谢。

标签: c# xml string xmlreader xmlwriter


【解决方案1】:

您必须指定ConformanceLevel,因为您的 xml 没有根元素。

还应始终处置所有使用过的资源。

using (XmlWriter writer = XmlWriter.Create(@"C:\\Test.XML"))
{
    writer.WriteStartDocument();
    writer.WriteStartElement("Test");

    string scontent = "<A a=\"Hello\"></A><B b=\"Hello\"></B>";

    var settings = new XmlReaderSettings();
    settings.ConformanceLevel = ConformanceLevel.Fragment;

    using (StringReader stringReader = new StringReader(scontent))
    using (XmlReader xmlReader = XmlReader.Create(stringReader, settings))
    {
        writer.WriteNode(xmlReader, true);
    }

    writer.WriteEndElement();
}

另外,您可以使用XmlWriterSettings添加缩进。

【讨论】:

    【解决方案2】:

    试试这个...在""之前加上\

    XmlWriter writer = XmlWriter.Create(@"C:\\Test.XML")
    writer.WriteStartDocument();
    writer.WriteStartElement("Test");
    
    string scontent = "<A a=\"Hello\"></A><B b=\"Hello\"></B>";
    XmlReader content = XmlReader.Create(new StringReader(scontent));
    writer.WriteNode(content, true);
    //Here only my first node comes in the new XML but I want complete scontent
    writer.WriteEndElement();
    

    【讨论】:

    • 如果您正在考虑转义这些字符,那不是我的意图。它不应该作为一个 XML 节点主体,而是作为一个 XML 结构。亚历克斯的解决方案奏效了。无论如何,谢谢。
    • 酷...快乐编码:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多