【问题标题】:Is it possible to build a dom tree with C# XmlReader only?是否可以仅使用 C# XmlReader 构建 dom 树?
【发布时间】:2013-03-12 14:11:03
【问题描述】:

我想用 XmlReader 在 any 有效的 xml 字符串 不使用 使用类 XmlDocument 或类 XDocument 构建一个 dom 树强>。 我很难确定元素<tank> 是否是元素<plane> 的子节点。因为元素 <plane> 没有结束标签。如果这个困难解决了,那么我就可以生成Dom树了。 有谁知道如何解决这个问题,或者有谁知道如何使用 XmlReader 动态构建 DOM 树?

Xml 内容:

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <plane visible="false" />
    <tank>
        <weapon name="cannon">equipped</weapon>
    </tank>
    <ship>
        <weapon name="cannon">equipped</weapon>
    </ship>
</root>

显示详细信息的脚本

XmlReader xr = XmlReader.Create(xmlContent);
while (xr.Read())
{
    Logger.Log(string.Concat("[", xr.NodeType, "][", xr.ValueType, "]", xr.Name, ",(",xr.HasValue,")" + xr.Value));
}

详情

[XmlDeclaration]    [System.String] xml,(True)version="1.0" encoding="utf-8"
[Element]           [System.String] root,(False)
[Element]           [System.String] plane,(False)
[Element]           [System.String] tank,(False)
[Element]           [System.String] weapon,(False)
[Text]              [System.String] ,(True)equipped
[EndElement]        [System.String] weapon,(False)
[EndElement]        [System.String] tank,(False)
[Element]           [System.String] ship,(False)
[Element]           [System.String] weapon,(False)
[Text]              [System.String] ,(True)equipped
[EndElement]        [System.String] weapon,(False)
[EndElement]        [System.String] ship,(False)
[EndElement]        [System.String] root,(False)

【问题讨论】:

    标签: c# xml xmlreader


    【解决方案1】:

    这里的问题是 &lt;plane&gt; 标签 不是 &lt;tank&gt; 标签的父标签 - 它是它的兄弟。如果&lt;plane&gt;标签需要是&lt;tank&gt;标签的父元素,则需要将其包装在xml中。

    如果您无法更改 xml,您可以使用xr.IsEmptyElement 来确定标签是否是自关闭的,并使用自定义逻辑来解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多