2012-01-25 41 views
1

我可以使用xmllint並使用XPath 1.0處理HTML/XHTML輸入。例如:可能用Saxon處理XHTML嗎?

xmllint --xpath "//title" --html http://www.w3.org/TR/xslt20/ 2>/dev/null

輸出預期,但與撒克遜:

java -cp /usr/share/java/saxon9he.jar net.sf.saxon.Query -s:"http://www.w3.org/TR/xslt20/" -qs:"//title"

沒有結果。
如果針對HTTP文件連接運行2分鐘後復位,並在本地文檔退出W/O結果後夫婦Ø分鐘處理

在薩克森documentation我無法找到任何有關處理XHTML文檔


我發現這個問題:Saxon Xpath namespace和我更新的問題更多的信息:

這裏是不使用HTML解析器(無--html開關)xmllint例如:

xmllint --xpath "//*[local-name()='title'][namespace-uri()='http://www.w3.org/1999/xhtml']" http://www.w3.org/TR/xslt20/

,其輸出:

<title>XSL Transformations (XSLT) Version 2.0</title> 

再次使用撒克遜:

java -cp /usr/share/java/saxon9he.jar net.sf.saxon.Query -s:"http://www.w3.org/TR/xslt20/" -qs:"//*[local-name()='title'][namespace-uri()='http://www.w3.org/1999/xhtml']" 

無結果

+0

當然,它可以,只要它是格式良好的XML(即它實際上是有效的XHTML)。值得注意的是,XHTML元素位於命名空間('http:// www.w3.org/1999/xhtml')中。確保你指定了命名空間。 –

+0

'http:// www.w3.org/TR/xslt20 /'*是* XHTML源文件。它通過HTML tidy XML測試,並且與它一起生成,因爲它可以很容易地被檢查 – theta

+0

我想你錯過了我粘貼的東西。它不是相同的字符串:'http:// www.w3.org/1999/xhtml'。你永遠不會與'// title'匹配任何東西,因爲它沒有考慮命名空間。 –

回答

0

XHTML文檔是XML文檔,所以可以在該過程中它與任何其他XML文檔相同的方式。請注意,如果它是XHTML,那麼大多數元素可能位於命名空間中,並且您需要考慮這一點。將XHTML命名空間設置爲默認命名空間可能會很有用(儘管在XQuery中令人遺憾,這也使它成爲輸出的默認命名空間 - XSLT可以更好地實現這一點)。

XHTML文檔在W3C服務器上包含對XHTML DTD的引用是很常見的,在過去的一年中W3C已停止響應請求來檢索此資源,因爲它們無法處理負載。這意味着您可能會遇到長時間延遲和I/O錯誤。爲此,Saxon 9.4包含XHTML DTD的本地副本,並滿足本地副本的請求。使用早期版本,您可以使用OASIS目錄實現相同的效果。

+0

感謝您的意見,Michael。我會嘗試解密本地XHTML DTD副本的含義;)我很好奇你是否可以評論爲什麼Saxon在本地XHTML副本http:// www中處理查詢(如DevNull註釋查詢)需要這麼不自然的時間例如.w3.org/TR/xslt20。我沒有太多的經驗,但否則撒克遜似乎並不緩慢,從我到目前爲止的嘗試 – theta

+0

正如我所提到的,如果有一個無節制的延遲,這是因爲XML解析器要求W3C爲DTD服務,而W3C不是' t服務它。撒克遜坐在那裏等着,就像你一樣...... –

相關問題