2012-10-06 79 views
2

定義的結果順序我有一個XPath表達式所示:XPATH - 通過查詢

element[@attr="a"] | element[@attr="b"] | element[@attr="c"] | …其是»或«語句。那麼我是否可以創建一個表達式來保證結果在查詢中以順序出現,即使這些元素在文檔中以不同順序出現?

f.e.一個文檔片段順序:

<doc> 
    <element attr="c" /> 
    <element attr="b" /> 
    <element attr="a" /> 
    . 
    . 
    . 
</doc> 

和結果列表排序是這樣的:

[0] <element attr="a" /> 
[1] <element attr="b" /> 
[2] <element attr="c" /> 
. 
. 
. 

回答

2

|操作符計算the union of its operands和使用XPath 1.0你只是得到一組節點,順序是不確定的,儘管大多數XPath API會以文檔順序返回結果,或允許您說出您想要的訂單或訂單是否重要(請參閱http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult)。

使用XPath 2.0,您將獲得按文檔順序排序的節點序列,如果您希望使用逗號運算符而不是聯合運算符(即element[@attr="a"] , element[@attr="b"] , element[@attr="c"])需要使用子表達式的順序,則使用XPath 2.0。

+0

謝謝!不幸的是,它在鉻 – philipp

+0

給它一個空的結果請更具體地說,究竟是什麼給了一個空的結果? –

+0

我曾嘗試在查詢中使用'''作爲分隔符,但它在鉻中無效,空結果回來.. – philipp

3

我可以創建保證結果在 以便出現在查詢表達式,即使元素出現在文檔中的不同 訂單?

  1. 不與任何XPath 1.0引擎 - 他們返回結果的XmlNodeList文檔順序。

  2. 在XPath 2.0一個可以指定序列要被返回的,使用逗號,操作者,這樣的:

    元素[@ ATTR = 「A」],元素[@ ATTR = 「b」 的],元素[@ ATTR =「C」]

  3. 最後,如果正在使用XPath限於1.0實現,得到的結果在期望的順序的一種方法是評價這三個XPath表達式:

    元素[@ attr =「a」]

    元素[@ ATTR = 「B」]

    元素[@ ATTR = 「C」]

然後,可以首先訪問所述第一結果,所述第二結果 - 第二和第三結果 - - 第三。