Ik gebruik de W3 DOM implementatie die standaard in Java 1.4.2 zit om een XML file uit te lezen. Ik ben geen held met Java, maar deze implementatie is vrij simpel. Nu heb ik de volgende XML die onderdeel uit maakt van een XML bestand:
Dit is een representatie voor 'left -> right1 right2 right 3'. Nu begint de java code met getElementsByClassName("production"). Hierbinnen 'loopt' de code over de child elementen, 'left' en 'right'. Als het (getNodeName()) 'left' is dan wordt het eerste kind gepakt. Daarbinnen wordt weer 'geloopt' omdat een item uit name, action en attributes kan bestaan (name is verplicht). Hier wordt weer op gecheckt met getNodeName().
In het geval van het element 'right' gebeurt hetzelfde, alleen loopt ie nog over alle items ipv automatisch het eerste kind pakken. Als ik dit doe dan is de 'item node' alleen ineens een #text node ipv een element. Dit terwijl 'name' er ook nog onder zit. Zowel getNodeValue() als getTextContent() geven een lege string (dus geen null) terug. De parent node outputten geeft wel gewoon 'item'. De XML file valideert ook, dus ik begrijp het niet.
Iemand enig idee hoe een dergelijke fout kan ontstaan? Waar ik vooral op moet letten? Mijn code is iig:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <production>
<left>
<item>
<name><![CDATA[content]]></name>
</item>
</left>
<right>
<item>
<name><![CDATA[content]]></name>
</item>
<item>
<name><![CDATA[content]]></name>
</item>
<item>
<name><![CDATA[content]]></name>
</item>
</right>
</production> |
Dit is een representatie voor 'left -> right1 right2 right 3'. Nu begint de java code met getElementsByClassName("production"). Hierbinnen 'loopt' de code over de child elementen, 'left' en 'right'. Als het (getNodeName()) 'left' is dan wordt het eerste kind gepakt. Daarbinnen wordt weer 'geloopt' omdat een item uit name, action en attributes kan bestaan (name is verplicht). Hier wordt weer op gecheckt met getNodeName().
In het geval van het element 'right' gebeurt hetzelfde, alleen loopt ie nog over alle items ipv automatisch het eerste kind pakken. Als ik dit doe dan is de 'item node' alleen ineens een #text node ipv een element. Dit terwijl 'name' er ook nog onder zit. Zowel getNodeValue() als getTextContent() geven een lege string (dus geen null) terug. De parent node outputten geeft wel gewoon 'item'. De XML file valideert ook, dus ik begrijp het niet.
Iemand enig idee hoe een dergelijke fout kan ontstaan? Waar ik vooral op moet letten? Mijn code is iig:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| if(leftright.getNodeName().equals("left") && leftright.hasChildNodes()) {
//left side
Node item = leftright.getChildNodes().item(1); //first item
(...)//gaat goed
}
else if(leftright.getNodeName().equals("right") && leftright.hasChildNodes()) {
//right side
NodeList rightItems = leftright.getChildNodes(); //all items
for(int k=0; k<rightItems.getLength(); k++) {
Node item = rightItems.item(k); //==lege #text node ipv '<item>'??
}
} |