DOM的子元素

时间:2012-06-09 16:19:17

标签: java dom xml-parsing

我有这个XML文件:

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

我需要所有名为“texture”的'scene'的子元素,但使用此代码:

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    
    }
}

我也得到了'node'内的'texture'元素。

我如何过滤掉这些?或者我怎样才能获得“场景”直接孩子的元素?

2 个答案:

答案 0 :(得分:4)

您可以使用Xpath执行此操作,请考虑以下从JAXP Specification 1.4获取的示例(我建议您参考此示例):

// 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);

答案 1 :(得分:1)

我发现自己的解决方案很好:

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
    }
}
相关问题