3

我有这个 XML 文件:

<scene>
    <texture file="file1.dds"/>
    <texture file="file2.dds"/>
    ...
    <node name="cube">
        <texture name="stone" unit="0" sampler="anisotropic"/>
    </node>
</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    
    }
}

我还得到了“节点”内的“纹理”元素。

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

4

2 回答 2

4

您可以使用Xpath执行此操作,请考虑取自JAXP 规范 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);
于 2012-06-09T16:21:20.220 回答
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
    }
}
于 2012-06-09T22:52:06.853 回答