user1266094
user1266094

Reputation:

Child elements of DOM

I have this XML file:

<scene>
    <texture file="file1.dds"/>
    <texture file="file2.dds"/>
    ...
    <node name="cube">
        <texture name="stone" unit="0" sampler="anisotropic"/>
    </node>
</scene>

I need all child element of 'scene' that are named "texture", but with this code:

Element rootNode = document.getDocumentElement();

NodeList childNodes = rootNode.getElementsByTagName("texture");
for (int nodeIx = 0; nodeIx < childNodes.getLength(); nodeIx++) {
    Node node = childNodes.item(nodeIx);

    if (node.getNodeType() == Node.ELEMENT_NODE) {
        // cool stuff here    
    }
}

i also get the 'texture' elements which are inside 'node'.

How can i filter these out? Or how can i get only the elements that are direct childs of 'scene'?

Upvotes: 3

Views: 876

Answers (2)

user1266094
user1266094

Reputation:

I found myself a solution that works fine:

Element parent = ... ;

String childName = "texture";
NodeList childs = parent.getChildNodes();

for (int nodeIx = 0; nodeIx < childs.getLength(); nodeIx++) {
    Node node = childs.item(nodeIx);

    if (node.getNodeType() == Node.ELEMENT_NODE 
            && node.getNodeName().equals(name)) {
        // cool stuff here
    }
}

Upvotes: 1

Edwin Dalorzo
Edwin Dalorzo

Reputation: 78639

You can do it using Xpath, consider the following example taken from the JAXP Specification 1.4 (which I recommend you to consult for this):

// parse the XML as a W3C Document
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
org.w3c.Document document = builder.parse(new File("/widgets.xml"));
// evaluate the XPath expression against the Document
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/widgets/widget[@name='a']/@quantity";
Double quantity = (Double) xpath.evaluate(expression, document, XPathConstants.NUMBER);

Upvotes: 4

Related Questions