我想使用XmlReader在任何有效xml字符串上使用 XmlDocument 或 XDocument 或 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)
答案 0 :(得分:1)
这里的问题是<plane>
标记不是 <tank>
标记的父级 - 它是它的兄弟。如果<plane>
标记需要是<tank>
标记的父元素,则需要将其包装在xml中。
如果您无法更改xml,则可以使用xr.IsEmptyElement
来确定标签是否自动关闭,并使用自定义逻辑来相应地解决该问题。