3

私はこの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    
    }
}

また、「ノード」内にある「テクスチャ」要素も取得します。

これらを除外するにはどうすればよいですか?または、「シーン」の直接の子である要素のみを取得するにはどうすればよいですか?

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

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
    }
}
于 2012-06-09T22:52:06.853 に答える