1

私はこのXMLファイルを持っています:

<root>
    <node1>
        <name>A</name>
        <node2>
            <name>B</name>
            <node3>
                <name>C</name>
                <number>001</number>
            </node3>
        </node2>
    </node1>
</root>

ファイルを解析して、各ノードの名前と、存在する場合は対応する番号を取得しています。

私が使う:

String number = eElement.getElementsByTagName("number").item(0).getTextContent();

これは私に次のようなものを与えるはずです:

Name | Number
A    | 
B    |
C    | 001

しかし、私は得る:

Name | Number
A    | 001
B    | 001
C    | 001

getElementsByTagName("Number")したがって、ノードのすべての子で番号ノードを探していると思います。私はそれをしたくありません。誰かが回避策を知っていますか?

上記の方法の代わりにXPathを使用することを考えましたが、既存の方法があるかどうかを知りたいです。ありがとう

4

3 に答える 3

2

JDK/JREの API を使用してjavax.xml.xpath、返される XML をより詳細に制御できますgetElementsByTagName

import java.io.File;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
        Document document = docBuilder.parse(new File("filename.xml"));

        XPathFactory xpathFactory = XPathFactory.newInstance();
        XPath xpath = xpathFactory.newXPath();
        Element element = (Element) xpath.evaluate("//node3/name", document, XPathConstants.NODE);
    }

}
于 2013-11-12T16:05:53.903 に答える
1

お役に立てれば、

import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class XML {

public static void main(String[] args) throws IOException {
    File input = new File("D:\\sample.xml");
    Document doc = Jsoup.parse(input, "UTF-8");
    Elements allElements = doc.select("root");
    for(Element value : allElements){
        System.out.println(value.text());
    }
    String node3Num = doc.select("node3").tagName("number").text();

        System.out.println(node3Num);
}

}

出力: ABC 001 C 001

jsoup-1.7.2 jar を使用しました (jsoup.org からダウンロードできます)。

于 2013-11-12T15:16:43.693 に答える