0

クラスXmlDocumentまたはクラスXDocumentを使用せずに有効なxml文字列上にXmlReaderを使用してDOMツリーを構築したいと思います。また、要素が要素の子ノードであるかどうかを判断するのが困難になりました。Elementには終了タグがないためです。この問題が解決されれば、Domツリーを生成できるようになります。誰かがこの問題を解決する方法を知っていますか、または誰かがXmlReaderを使用して動的にDOMツリーを構築する方法を知っていますか?<tank><plane><plane>

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)
4

1 に答える 1

1

ここでの問題は、<plane>タグがタグの親ではなく<tank>、兄弟であることです。<plane>タグをタグの親要素にする必要がある場合<tank>は、xml でラップする必要があります。

xml を変更できない場合は、 を使用xr.IsEmptyElementして、タグが自己閉鎖されているかどうかを判断し、それに応じてそれを回避するカスタム ロジックを用意できます。

于 2013-03-12T15:03:44.360 に答える