XmlNode.HasChildNodes vraag

Status
Niet open voor verdere reacties.

Dipke

Gebruiker
Lid geworden
29 dec 2011
Berichten
23
Hi,
Ik heb volgende vraag.
Wanneer ik het volgende stukje XML inlees en de verschillende node selecteer via XPath wil ik weten welke node childnodes hebben.
Mijn probleem is dat de eerste node "<SingleNode>" ook HasChildNodes op true zet en 1 childnode weergeeft.
Hoe kan ik dan het verschil zien tussen "<SingleNode>" en "<NodeWithOneChild>" ?
De derde geeft haschildnode true terug met 3 childnodes en is geen probleem, maar ik wil het verschil tussen de eerste en de tweede zien.

Code:
<SingleNode>directory</SingleNode>

<NodeWithOneChild>
    <Dir>directory_1</Dir>
</NodeWithOneChild>

<NodewithMultipleChilds>
    <Dir>directory_1</Dir>
    <Dir>directory_2</Dir>
    <Dir>directory_3</Dir>
</NodewithMultipleChilds>

Bedankt
 
Laatst bewerkt:
Het antwoord staat hier beschreven: xmlelement-haschildnodes-property-definition

Samengevat moet je elk element doorlopen om te controleren of het een childnode van het type XMLElement bevat. Een voorbeeldje:
PHP:
XmlDocument doc = new XmlDocument();
            doc.LoadXml(@"<rootElem><SingleNode>directory</SingleNode>

            <NodeWithOneChild>
                <Dir>directory_1</Dir>
            </NodeWithOneChild>

            <NodewithMultipleChilds>
                <Dir>directory_1</Dir>
                <Dir>directory_2</Dir>
                <Dir>directory_3</Dir>
            </NodewithMultipleChilds></rootElem>");

            XmlNode node = doc.GetElementsByTagName("SingleNode").Item(0);
            bool hasChilds = node.HasChildNodes; // true
            bool hasChilds2 = node.ChildNodes.Cast<XmlNode>().Any(cn => cn.GetType() == typeof(XmlElement)); // false

            XmlNode node2 = doc.GetElementsByTagName("NodewithMultipleChilds").Item(0);
            bool node2_hasChilds = node2.HasChildNodes; // true
            bool node2_hasChilds2 = node2.ChildNodes.Cast<XmlNode>().Any(cn => cn.GetType() == typeof(XmlElement)); // true

De .Any functie controleert of tenminste één van de items in een array/list voldoet aan de eisen, in dit geval of het type van de XmlNode van het type XmlElement is (overerving speelt hier een rol in)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan