2012-04-03 19 views
1

セイXPathのJavaで次のデータベースをインデックス値を一致させる方法(一般的に、彼らははるかに大きくなります):私が持っている

<inventory> 
<book year="2000"> 
    <title>Snow Crash</title> 
    <author>Neal Stephenson</author> 
    <publisher>Spectra</publisher> 
    <isbn>0553380958</isbn> 
    <price>14.95</price> 
</book> 

<book year="2005"> 
    <title>Burning Tower</title> 
    <author></author> 
    <publisher>Pocket</publisher> 
    <isbn>0743416910</isbn> 
    <price>5.99</price> 
</book> 

<book year="1995"> 
    <title>Zodiac</title> 
    <author>Neal Stephenson</author> 
    <publisher>Spectra</publisher> 
    <isbn>0553573862</isbn> 
    <price>7.50</price> 
</book> 

<!-- more books... --> 

私は本のタイトルと著者のすべてをつかむしたいですタイトルとそれに対応する作者を印刷します。 2番目のエントリには著者がリストされていないことに注意してください。私は、XPathが3冊の本のリストを作成するが、わずか2人の著者しか作成しないことを発見した。したがって、各リストの同じインデックス値を使用してループを作成することで、対応するブック/作成者のコンボを印刷することはできません(最初のエントリに対してのみ機能し、次に1つ落ちます)。著者リストにはこれ以上のエントリはありません)。この問題を回避する方法はありますか?

読んでいただきありがとうございます。

注:これまでのコードの一部:

XPathExpression expr1 = xpath.compile("//pre:entry/pre:title/text()"); 
XPathExpression expr2 = xpath.compile("//pre:entry/pre:author/text()"); 

Object result1 = expr1.evaluate(doc, XPathConstants.NODESET); 
Object result2 = expr2.evaluate(doc, XPathConstants.NODESET); 

NodeList nodes1 = (NodeList) result1; 
NodeList nodes2 = (NodeList) result2; 

for (int i = 0; i < nodes1.getLength(); i++) { 
    System.out.println(nodes1.item(i).getNodeValue()); 
    System.out.println(nodes2.item(i).getNodeValue()); 
} 

答えて

2

あなたは、例えば、各book要素にtitleauthor要素を取得し、すべてのbook要素を投げる反復処理する必要があります擬似コード:

var bookNodes = XPath.select('//pre:book'); 
foreach book in booknodes 
    var title = book.select('pre:title'); 
    var author = book.select('pre:author'); 
+0

ありがとう、これはまさにトリックです! – blaughli

+0

これをJavaで実装する際に問題があります。アドバイスをいただければ幸いです。 – blaughli