子ノードに属性が含まれるノードを取得する 質問する

子ノードに属性が含まれるノードを取得する 質問する

次のような XML があるとします。

<book category="CLASSICS">
  <title lang="it">Purgatorio</title>
  <author>Dante Alighieri</author>
  <year>1308</year>
  <price>30.00</price>
</book>

<book category="CLASSICS">
  <title lang="it">Inferno</title>
  <author>Dante Alighieri</author>
  <year>1308</year>
  <price>30.00</price>
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>

<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>

言語属性が「it」のタイトル ノードを持つすべてのブック ノードを取得する xpath を実行したいと思います。

私の試みは次のようなものでした:

//book[title[@lang='it']]

しかし、それは機能しませんでした。ノードが戻ってくることを期待しています:

<book category="CLASSICS">
  <title lang="it">Purgatorio</title>
  <author>Dante Alighieri</author>
  <year>1308</year>
  <price>30.00</price>
</book>

<book category="CLASSICS">
  <title lang="it">Inferno</title>
  <author>Dante Alighieri</author>
  <year>1308</year>
  <price>30.00</price>
</book>

何かヒントはありますか?

ベストアンサー1

試す

//book[title/@lang = 'it']

次のように書かれています:

  • すべてのbook要素 を取得する
    • 少なくとも1つtitle
      • 属性を持つlang
        • 値は"it"

あなたは見つけるかもしれませんこれ役に立つ記事です。「5 つの段落で説明する XPath」ロナルド・ブーレ著。

しかし、正直に言うと、//book[title[@lang='it']]XPath エンジンに「問題」がない限り、上記は同等であるはずです。したがって、コードまたはサンプル XML に、私たちに示していない何かがある可能性があります。たとえば、サンプルは XML フラグメントです。ルート要素に名前空間があり、クエリでそれを考慮していない可能性がありますか? また、機能しなかったことだけを伝えましたが、どのような結果が得られたかは伝えませんでした。

おすすめ記事