一尘不染

XML错误:存在多个根元素

c#

我从Web服务获取XML。XML如下所示:

<parent>
    <child>
        Text
    </child>
</parent>
<parent>
    <child>
        <grandchild>
            Text
        </grandchild>
        <grandchild>
            Text
        </grandchild>
    </child>
    <child>
        Text
    </child>
</parent>

etc.

这是我的C#代码:

StringBuilder output = new StringBuilder();

// Create an XmlReader
using (XmlReader reader = XmlReader.Create(new StringReader(xoResponse.@return)))
{
    XmlWriterSettings ws = new XmlWriterSettings();
    //ws.Indent = true;
    using (XmlWriter writer = XmlWriter.Create(output, ws))
    {
        // Parse the file and display each of the nodes.
        while (reader.Read())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    writer.WriteStartElement(reader.Name);
                    break;
                case XmlNodeType.Text:
                    writer.WriteString(reader.Value);
                    break;
                case XmlNodeType.XmlDeclaration:
                case XmlNodeType.ProcessingInstruction:
                    writer.WriteProcessingInstruction(reader.Name, reader.Value);
                    break;
                case XmlNodeType.Comment:
                    writer.WriteComment(reader.Value);
                    break;
                case XmlNodeType.EndElement:
                    writer.WriteFullEndElement();
                    break;
            }
        }
    }
}

我相信该错误将引发第二个父元素。如何避免此错误?任何帮助是极大的赞赏。


阅读 1236

收藏
2020-05-19

共1个答案

一尘不染

您需要将<parent>元素包含在周围的元素中,因为XML文档只能有一个根节点:

<parents> <!-- I've added this tag -->
    <parent>
        <child>
            Text
        </child>
    </parent>
    <parent>
        <child>
            <grandchild>
                Text
            </grandchild>
            <grandchild>
                Text
            </grandchild>
        </child>
        <child>
            Text
        </child>
    </parent>
</parents> <!-- I've added this tag -->

当您从其他地方接收到该标记时,而不是自己生成标记,您可能必须自己尝试通过将响应视为字符串并用适当的标签包装它,然后再尝试将其解析为XML。

因此,您有两种选择:

  1. 获取Web服务的提供者以返回具有一个根节点的 实际 XML
  2. 如上文所述,对XML进行预处理,以添加根节点
  3. 对XML进行预处理,以将其拆分为多个块(即,每个<parent>节点一个),并将每个块作为不同的XML文档进行处理
2020-05-19