6

次のようなXMLのセクションがあります。

<entry>
<id>tag:example.com,2005:Release/343597</id>
<published>2012-04-10T11:29:19Z</published>
<updated>2012-04-10T12:04:41Z</updated>
<link type="text/html" href="http://example.com/projects/example1" rel="alternate"/>
<title>example1</title>
</entry>

http://example.com/projects/example1このブロックからリンクを取得する必要があります。これを行う方法がわかりません。プロジェクトのタイトルを取得するには、次のコードを使用します。

String title1 = children.item(9).getFirstChild().getNodeValue();

ここで、はブロックchildrengetChildNodes()オブジェクトです。<entry> </entry>しかし、同様の方法でノードNullPointerExceptionsのノード値を取得しようとすると、取得し続けます。<link>ノードごとにXMLコードが異なるようですが、その<link>値がわかりません。...アドバイスしてください。

4

2 に答える 2

14

そのノードを取得するためのxpath式は

//entry/link/@href

Javaでは次のように書くことができます

Document doc = ... // your XML document
XPathExpression xp = XPathFactory.newInstance().newXPath().compile("//entry/link/@href");
String href = xp.evaluate(doc);

link次に、特定のエントリの値を取得する必要がある場合はid、xpath式を次のように変更できます。

//entry[id='tag:example.com,2005:Release/343597']/link/@href

最後に、ドキュメント内のすべてのリンクを取得する場合、ドキュメントに多くのエントリ要素がある場合は、次のように記述できます。

Document doc = ... // your XML document
XPathExpression xp = XPathFactory.newInstance().newXPath().compile("//entry/link/@href");
NodeList links = (NodeList) xp.evaluate(doc, XPathConstants.NODESET);
// and iterate on links
于 2012-04-10T18:33:23.807 に答える
6

完全なコードは次のとおりです。

    DocumentBuilderFactory domFactory = DocumentBuilderFactory
            .newInstance();
    domFactory.setNamespaceAware(true);
    DocumentBuilder builder = domFactory.newDocumentBuilder();
    Document doc = builder.parse("test.xml");
    XPath xpath = XPathFactory.newInstance().newXPath();
    XPathExpression expr = xpath.compile("//entry/link/@href");
    Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;
    for (int i = 0; i < nodes.getLength(); i++) {
         System.out.println(nodes.item(i));
    }
于 2012-04-10T18:41:13.457 に答える