2

XPathクエリからデータを取得したい:

Element location = (Element) doc.query("//location[location_name='"+ locationName +"']/*").get(0).getDocument().getRootElement();
System.out.println(location.toXML());

Element loc = location.getFirstChildElement("location");
System.out.println(loc.getFirstChildElement("location_name").getValue());

ただし、何を選択しても、常に1つのノードを取得します(の理由で.get(0))。クエリで選択したノードの選び方がわかりません。

ノードをElementにキャストする必要があることがわかりました(XOMはノードから属性を取得していますか?)が、リンクには最初のノードを選択する方法しか示されていません。

4

3 に答える 3

4

getParent()結果の最初の要素を呼び出します。

Builder parse = new Builder();
Document xml = parse.build("/var/www/JAVA/toForum.xml");

System.out.println(xml.query("//location[@id=83]/*").get(0).getParent().toXML());

次の出力が生成されます。

<location id="83">
  <location_name>name</location_name>
  <company_name>company a</company_name>
  <machines>
    <machine id="12">A</machine>
    <machine id="312">B</machine>
  </machines>
</location>
于 2011-06-07T17:03:58.523 に答える
2

あなたが行った呼び出しgetDocument()は、XML ドキュメント全体を返しています。

を呼び出すと、対象のノードへの参照を直接含むオブジェクトがquery()返されます。Nodes

に変更すると

Element location = (Element)doc.query(
            "//location[location_name='"+ locationName +"']/*").get(0);

System.out.println(location.getAttribute("location_name").getValue());

それは大丈夫なはずです

EDIT(extraneonによる)

それ自体では答えに値しない追加の説明:

Element location = 
  (Element) doc.query("//location[location_name='" 
                       + locationName +"']/*").get(0)
            .getDocument().getRootElement();

ツリーを検索して、要求されたノードを取得します。しかし、必要getDocument().getRootNode()な要素を呼び出すと、ドキュメントの最上位ノードが得られます。

したがって、上記のクエリは次のように簡略化できます。

Element location = (Element)doc.getRootElement();

これはあなたが意図したものではありません。

バンジージャンプに少し似ています。必要な場所 (要素) に移動しますが、すぐに元の場所 (ルート要素) に戻ります。

于 2011-06-03T07:54:18.733 に答える
0

(少なくとも私にとっては)実際に何をしなければならないかは明確ではありません。クエリから、指定された基準に一致するノードのリストを取得する必要があります。NodeList を取得すると、この NodeList を反復処理して、たとえば getNodeValue を使用して各ノードのコンテンツを取得できます。

于 2011-05-17T08:12:00.817 に答える