我正在學習XSLT,並作爲練習,我試圖讓http://ptchan.org/fa/,即{人,AZ,FA,GA,李,TM}頂部鏈接XHTML。要做到這一點,我創建了以下XSL模板:XHTML與XSLT和它的編碼
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<html>
<body>
<h2>Links</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>URL</th>
</tr>
<xsl:for-each select="//div[@class='navbar']/a">
<tr>
<td><xsl:value-of select="self::node()"/></td>
<td><xsl:value-of select="@href"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我還創建了一個dummy XML文件只是代表我想在regular file,這是通過curl http://ptchan.org/fa/ | tidy -utf8 -asxml
產生得到的節點。轉換,xsltproc
,與虛擬文件一起使用,但不與常規文件一起使用。經過一些Google搜索之後,我發現源文件上的(1)DOCTYPE和(2)
正在引起麻煩,但即使在刪除它們之後,轉換也不會發生。
任何想法,我在做什麼錯了,如何轉換該文件?
謝謝!
我認爲你需要用's代碼來標記(2)之後的任何內容。 –
實體問題會提示'xsltproc'在加載DTD /實體定義時遇到問題。在有問題的輸入文件上運行時,運行'xmllint --loaddtd'是否報告任何錯誤?可能是w3.org阻止從'xsltproc'(libxslt)訪問XHMTL DTD。無論如何,最好擁有所需DTD的本地副本,並設置XML目錄以便使用這些本地副本。 (例如,在Ubuntu安裝包'w3c-dtd-xhtml'中負責處理XHTML。) –
並且,爲了減少命名實體(必須加載DTD以獲取其定義)的問題,您可能需要使用用'tidy'交換' - 數字'開關,以使用數字而不是命名實體。 –