66

text()との違いがよくわかりませんnode()。私が理解していることから、この場合はリンゴtext()であるタグの間にあるものは何でもあります。ノードはそのノードが実際に何であれ、アイテムになります<item>apple</item>

しかし、その後、「生産中のすべてのアイテムのテキストを選択する」ように求められ、別の質問で「すべての部門のすべてのマネージャー ノードを選択する」ように求められる作業が割り当てられました。

text()とは対照的に、出力はどのように見えると思われますかnode()

XML のスニペット:

<produce>
 <item>apple</item>
 <item>banana</item>
 <item>pepper</item>
</produce>

<department>
 <phone>123-456-7891</phone>
 <manager>John</manager>
</department>

もちろん、より多くの部門とより多くのマネージャーがいますが、これはコードのスニペットにすぎません。

どんな助けでも大歓迎です!

4

2 に答える 2

132

text()node()ノード テストで、XPath 用語では (比較) です。

ノード テストは、ノードのセット (正確には上) で動作し、特定のタイプのノードを返します。軸が指定されていない場合、childデフォルトで軸が想定されます。

すべての種類のノード テストがあります。

  • node()任意のノードに一致します (それらすべての中で最も特異性の低いノード テスト)
  • text()テキストノードのみに一致
  • comment()コメントノードに一致
  • *任意の要素ノードに一致
  • foo指定された任意の要素ノードに一致"foo"
  • processing-instruction()PI ノードに一致します ( のように見えます<?name value?>)。
  • 補足:*属性ノードにも一致しますが、attribute軸に沿ってのみです。@*の省略形ですattribute::*。アトリビュートはchild軸の一部ではないため、法線はアトリビュートを*選択しません。

この XML ドキュメント:

<produce>
    <item>apple</item>
    <item>banana</item>
    <item>pepper</item>
</produce>

次の DOM (簡略化) を表します。

ルート ノード
   要素ノード (name="produce")
      テキストノード (value="\n ")
      要素ノード (name="item")
         テキストノード (value="apple")
      テキストノード (value="\n ")
      要素ノード (name="item")
         テキストノード (value="バナナ")
      テキストノード (value="\n ")
      要素ノード (name="item")
         テキストノード (value="pepper")
      テキストノード (value="\n")

したがって、XPath では次のようになります。

  • /ルートノードを選択します
  • /produce名前がある場合、ルート ノードの子要素を選択します"produce"(これはドキュメント要素と呼ばれ、ドキュメント自体を表します。ドキュメント要素とルート ノードはよく混同されますが、同じものではありません。)
  • /produce/node()下にある任意のタイプの子ノード/produce/(つまり、7 つの子すべて)を選択します。
  • /produce/text()4 (!) 個の空白のみのテキスト ノードを選択します
  • /produce/item[1]指定された最初の子要素を選択します"item"
  • /produce/item[1]/text()すべての子テキスト ノードを選択します (この場合、"apple" は 1 つだけです)。

等々。

それで、あなたの質問

  • 「生産中のすべてのアイテムのテキストを選択」 /produce/item/text() (3 つのノードが選択されている)
  • 「全部門の全管理者ノードを選択」 //department/manager(1ノード選択)

ノート

  • XPathのデフォルトのchildは軸です。別の軸名を前に付けることで、軸を変更できます。例えば://item/ancestor::produce
  • 要素ノードにはテキスト値があります。要素ノードを評価すると、そのテキスト コンテンツが返されます。この例の場合、/produce/item[1]/text()string(/produce/item[1])は同じになります。
  • XPath式の個々の部分をグラフィカルに概説しているこの回答も参照してください。
于 2012-07-31T16:27:16.247 に答える