簡體   English   中英

這些在xpath中有什么區別?

[英]what is the difference between these in xpath?

我是xpath的新手,現在可以讓我詳細介紹一下xpath中的/bookstore/*/bookstore什么區別嗎?

可以說這是示例輸入

<bookstore>
    <book>
      <title lang="en">Harry Potter</title>
      <price>29.99</price>
    </book>
    <book>
      <title lang="en">Learning XML</title>
      <price>39.95</price>
    </book>
</bookstore>

<bookstore>

    <book>
      <title lang="en">Harry Potter1</title>
      <price>29.999</price>
    </book>

    <book>
      <title lang="en">Learning XML1</title>
      <price>39.955</price>
    </book>

</bookstore>

兩種情況下將輸出什么? 提前致謝。

假設以下簡單的輸入文檔:

<bookstore>
   <book/>
   <book/>
</bookstore>

現在,表達

/bookstore

手段

選擇一個名為bookstore的元素,但前提是它是文檔的最外面的元素

格式良好的XML 1中只能有一個最外面的元素,因此上面的路徑表達式最多只能選擇一個元素節點。

/bookstore/*

手段

選擇一個名為bookstore的元素,但前提是它是文檔的最外面的元素。 然后,選擇其所有直接子元素,無論其名稱如何。

1正如Michael Kay指出的,除了您正在以編程方式構造XML樹。 然后,可能有多個最外面的元素。


那么如果/ bookstore / *輸出,則不包含<bookstore></bookstore>

我可以看到兩種閱讀此問題的方法。

為什么同時使用<element></element>

<bookstore></bookstore>視為一個元素 它們是該元素的開始和結束標簽 將輸入文檔讀入內存后,將其存儲在沒有打開和關閉標簽的樹狀結構(例如DOM)中。 而正是這種表示形式可以用來評估XPath表達式。

但是,如果輸出評估XPath表達式的結果,則結果樹再次序列化 ,並且重新出現標簽-這可能會造成混淆。

是否選擇了路徑中提到的所有元素?

不,像這樣的表達

/bookstore/book

僅選擇book元素節點。 僅選擇最后一個軸心步驟之后最右邊的項目(如/parent:: :)

表達式/bookstore/*將選擇子節點, /bookstore將選擇節點本身。

例如, /bookstore/*將選擇/bookstore下的所有子元素 ,因此您可能最終得到了一個元素集合。 請注意,如果這是一個更復雜的表達式(如/bookstore/book/*並且存在多個/bookstore/book元素,則將選擇所有匹配節點的所有子級。

表達式/bookstore將僅選擇元素/bookstore 與上述類似,如果沿着/bookstore/book類的路徑進行選擇,可能會導致元素集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM