2012-01-04 57 views
3

這可能是一個愚蠢的問題,但是可以使用XPath進行查詢而不指定元素名稱? 通常我會寫一些像查詢多個元素而不指定元素名稱

//ElementName[@id = "some_id"] 

但事實是我有一個id屬性多(約40),不同的元素類型,我希望能夠回到任何人如果ID相符。但我不想單獨爲每種類型打電話。無論名稱如何,是否可以一次搜索所有這些內容?

我在XQuery腳本中使用它,如果提供任何幫助。

+1

不是一個愚蠢的問題 – 2012-01-04 18:58:45

回答

5

用*代替名字//*[@id = "some_id"]

+0

這麼簡單:)謝謝! – pajevic 2012-01-04 19:12:43

1

這可能是更有效的直接在@id要素看 - // *將工作,但開始會返回每個節點在文檔中,然後過濾!

當然,這在小文檔中可能無關緊要。但這裏有一個選擇:

//@id[.="some_id"]/.. 
+0

其實它很重要,因爲我從一個數據庫中查詢很多(超過100.000個元素)。 – pajevic 2012-01-05 12:49:02

+0

如果它是一個XML數據庫,如MarkLogic或eXist,您可能會發現某些屬性(如@id)已編入索引,這也可能有利於此替代方法。 – 2012-01-05 14:13:20

+0

實際上,我使用eXist,並且在eXist郵件列表中詢問了哪些最有效。以下是Wolfgang Meier(eXist的原始創建者)回覆: _eXist優化// * [@ id =「some_id」]中的通配符步驟, 基本上與'//@id[.="some_id「]相同/ ..'。 eXist將首先評估'@id =「some_id」',然後計算'@ id'的哪些父元素將匹配通配符。但對於一般的XPath查詢,我相信您的建議是有效的。 – pajevic 2012-01-05 21:38:09

相關問題