比方說,我有一個完整的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. SQL獲取第一個匹配的行
- 3. 獲取匹配特定CIDR
- 4. 在XSLT/XPath中,如何獲取與特定名稱不匹配的第一個屬性?
- 5. 在標記中獲取特定類的最後一項
- 6. 從第一和最後一個記錄匹配的標準
- 7. 識別重複項並標記第一個匹配項和所有其他匹配項
- 8. Xpath使用href標記中的匹配文本獲取第二個url
- 9. 找到第一個匹配時,打破每個循環的XSLT
- 10. 如何匹配NodeList中的特定項目並獲取它NodeValues?
- 11. PHP:獲取匹配特定值
- 12. 刪除第一個匹配項
- 13. 查找與標準匹配的第一個序列項目
- 14. 如何匹配第一個/之後的特定字符
- 15. 獲得模式的第一個匹配項
- 16. 如何使用XSLT匹配文檔中的第一個元素?
- 17. 只顯示第一個匹配的XSLT轉換
- 18. XSLT:獲取起始標記的長度
- 19. 第一個捕獲組匹配不同
- 20. 使用xslt刪除特定標記
- 21. 拉特定記錄只匹配多個行中的一組值
- 22. Stream方式獲取第一個元素匹配的索引boolean
- 23. XSLT:獲取節點,在一個特定的值存在
- 24. 獲取給定標記的最後一個git標記
- 25. 獲取第一個TBL中的所有記錄和第二個TBL中的匹配(指示存在的那些)
- 26. 獲取git中特定標記下方的標記
- 27. 如果存在特定的匹配項,則返回一個值
- 28. sed:是否有一個選項可以替換每行匹配的第N個和第M個匹配項?
- 29. 在數據的最後一個序列中獲得第一個匹配項
- 30. REGEXP_LIKE匹配不像特定字符串的XML標記內容
你有什麼迄今得到?什麼不起作用? – Oded 2010-04-23 12:29:38
好問題(+1)。看到我的答案是迄今唯一正確的解決方案。 :) – 2010-04-23 13:03:41