比方說,我有一個完整的html文檔作爲XML輸入。
如果我只想輸出HTML中的第一個(或任何)圖像,XSLT文件將如何顯示?XSLT獲取特定標記的第一個匹配項
回答
一個文檔中選擇第一個<img>
元素的一個XPath表達式是:
(//img)[1]
請注意是一個常見的錯誤 - 由@Oded
在他的回答讓是建議以下XPath表達式 - 通常它可以選擇多個元素:
//img[1]
(:錯誤!!! :)
這將選擇文檔中的所有<img>
元素,其中每一個元素都是其父元素的第一個子元素<img>
。
下面是這個常見的錯誤的確切的解釋 - 在W3C XPath 1.0 Recommendation:
注意:位置路徑//para[1]
並不意味着一樣的位置路徑/descendant::para[1]
。後者選擇第一個後裔para
元素;前者選擇所有後代para
元素,這是他們父母的第一個孩子。
更進一步的問題存在如果文檔已經定義了默認名稱空間,這必須是XHTML的情況。 XPath將任何前綴名稱歸屬於否命名空間和表達式(//img)[1]
不選擇節點,因爲文檔中沒有屬於的元素沒有名稱空間並且名稱爲img
。
在這種情況下,有指定想要的XPath表達式有兩種方式:
(//x:img)[1]
- 其中前綴x
關聯(由主導語言)與特定默認namespcae(在這種情況下,該是XHTML命名空間)。(//*[name()='img'])[1]
XPath表達式將從HTML頁面檢索第一個圖像:(//img)[1]
。
請參閱@Dimitre Novatchev
的答案以獲取有關問題的更多信息。
請參閱我的回答,以解答與您的答案有關的問題。閱讀XPath規範 - 「//」縮寫的定義,並搜索這個頻繁的錯誤。如果問題仍然不清楚,請提出一個單獨的問題,很多人會很樂意解釋。 :) – 2010-04-23 13:02:47
**這個答案是W R O N G ** !!!!!請參閱我的解答。 – 2010-04-23 13:18:06
我絕對不想閱讀XPath規範。但是我明白迪米特雷在說什麼。 '// img [1]'將選擇* any * parent的第一個img標籤,而不是第一個文檔。 – 2010-04-23 13:23:13
- 1. RxExp匹配第一個標記
- 2. 使用xslt獲取第一個xml塊的標記名稱
- 3. 獲取第一個匹配的祖先包含一個特定的類
- 4. SQL獲取第一個匹配的行
- 5. 獲取匹配特定CIDR
- 6. 在XSLT/XPath中,如何獲取與特定名稱不匹配的第一個屬性?
- 7. 獲取特定標記的相應值-XML和XSLT
- 8. 在標記中獲取特定類的最後一項
- 9. 從第一和最後一個記錄匹配的標準
- 10. 獲取所有行,直到匹配一個特殊匹配
- 11. 識別重複項並標記第一個匹配項和所有其他匹配項
- 12. 使用XSLT獲取XML中指定標記旁邊的標記
- 13. 僅在xslt中使用單標記標記的模式匹配
- 14. Xpath使用href標記中的匹配文本獲取第二個url
- 15. 找到第一個匹配時,打破每個循環的XSLT
- 16. XSLT - 不匹配的標籤
- 17. 如何匹配NodeList中的特定項目並獲取它NodeValues?
- 18. PHP:獲取匹配特定值
- 19. XSLT:如何匹配給定元素的第一次出現?
- 20. 刪除第一個匹配項
- 21. 查找與標準匹配的第一個序列項目
- 22. 如何匹配第一個/之後的特定字符
- 23. XSLT 2.0:替換模式匹配特定標準
- 24. SQL選擇第一個匹配標準
- 25. 獲得模式的第一個匹配項
- 26. 如何獲得模式的第一個匹配項?
- 27. XSLT:獲取起始標記的長度
- 28. 只顯示第一個匹配的XSLT轉換
- 29. 如何使用XSLT匹配文檔中的第一個元素?
- 30. jquery filter:只獲得第一個匹配?
你有什麼迄今得到?什麼不起作用? – Oded 2010-04-23 12:29:38
好問題(+1)。看到我的答案是迄今唯一正確的解決方案。 :) – 2010-04-23 13:03:41