2009-10-20 31 views
1

我正在學習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)&nbsp;正在引起麻煩,但即使在刪除它們之後,轉換也不會發生。

任何想法,我在做什麼錯了,如何轉換該文件?

謝謝!

+0

我認爲你需要用's代碼來標記(2)之後的任何內容。 –

+0

實體問題會提示'xsltproc'在加載DTD /實體定義時遇到問題。在有問題的輸入文件上運行時,運行'xmllint --loaddtd'是否報告任何錯誤?可能是w3.org阻止從'xsltproc'(libxslt)訪問XHMTL DTD。無論如何,最好擁有所需DTD的本地副本,並設置XML目錄以便使用這些本地副本。 (例如,在Ubuntu安裝包'w3c-dtd-xhtml'中負責處理XHTML。) –

+0

並且,爲了減少命名實體(必須加載DTD以獲取其定義)的問題,您可能需要使用用'tidy'交換' - 數字'開關,以使用數字而不是命名實體。 –

回答

0

問題是沒有指定名稱空間。文檔中沒有div,但是xhtml:div。

0

由於您使用的是xsltproc,最簡單的方法就是使用命令行開關,它應該能夠直接處理「untidied」HTML輸入。