1

xmlreaderXMLファイルの読み取りに使用しています。要素に子ノードがあるかどうかを識別したい。

現在、IsEmptyElementメソッドを使用して、子要素があるかどうかを確認しています。タグに要素ではなくテキストデータが含まれていても、trueを返すことがわかりました。

if (!file.IsEmptyElement) {
    elem.subElems.Add(readXml(file));
}

xml リーダーを使用してこの問題を解決するにはどうすればよいですか? どんな助けでも大歓迎です。

ありがとうございました。

4

2 に答える 2

2

確認するだけの場合は、代わりにXmlDocumentを使用してください...理解しやすく、コーディングしやすいことがわかりました。

XmlDocument doc = new XmlDocument();
doc.LoadXml("YourDocument");

XmlNode root = doc.FirstChild;

if (root.HasChildNodes)
{
    // Do something...
}

読者:

using (XmlReader reader = ...)
{
    while (reader.Read())
    {
        if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == ...))
        {
            Int32 childrenCount = CountChildred(reader, XmlNodeType.Element);
            // Your code...

public static Int32 CountChildred(XmlReader node, XmlNodeType type)
{
    Int32 count = 0;
    Int32 currentDepth = node.Depth;
    Int32 validDepth = currentDepth + 1;

    while (node.Read() && (node.Depth != currentDepth))
    {
        if ((node.NodeType == type) && (node.Depth == validDepth))
            ++count;
    }

    return count;
}
于 2013-01-18T04:55:24.660 に答える
1

IsEmptyElementの動作は予想されますが、実際にはリーダーを使用すると、リーダーが要素の先頭に配置されたときに取得できる情報はこれだけです。その時点で、リーダーは要素の内部XMLを読み取ろうとしなかったため、子ノード、テキストノード、または両方が混在しているかどうかについての情報はありません。

修正するには、各子要素を読み取り、それらを個別にリスト(または所有しているもの)に追加する必要があります。

于 2013-01-18T05:07:45.860 に答える