2011-07-31 67 views
2

我正在嘗試清理一些htmls。我已經轉換他們整齊xsltproc html文檔

$ tidy -asxml -i -w 150 -o o.xml index.html 

產生的XHTML結束有命名實體XHTML。 在這些xhtmls上嘗試xsltproc時,我不斷收到錯誤。

$ xsltproc --novalid -o out.htm t.xsl o.xml 
o.xml:873: parser error : Entity 'mdash' not defined 
      resources to storing data and using permissions &mdash; as needed.</ 
                   ^
o.xml:914: parser error : Entity 'uarr' not defined 
     </div><a href="index.html#top" style="float:right">&uarr; Go to top</a> 
                   ^
o.xml:924: parser error : Entity 'nbsp' not defined 
      Android 3.2&nbsp;r1 - 27 Jul 2011 12:18 

如果我添加--html它抱怨在具有名稱和ID標籤的xsltproc的同名(有效期)

$ xsltproc --novalid --html -o out.htm t.xsl o.xml o.xml:845: element a: validity error : ID top already defined 
     <a name="top" id="top"></a> 
          ^

的XSLT是簡單的屬性

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="//*[@id=side-nav]"/> 
</xsl:stylesheet> 

爲什麼不--html工作?它爲什麼抱怨?或者我應該忘記它並修復實體?

+0

那麼問題是什麼?我沒看到一個。 –

回答

0

我假設這個不明確的問題是這樣的:我知道如何避免運行xsltproc(添加--html)時出現「Entity'XXX'未定義」錯誤。但是,我如何擺脫「ID YYY已定義」?

Tidy最新版本有anchor-as-name選項。您可以將其設置爲「否」以刪除不需要的name屬性:

此選項控制在可用作定位點的元素中刪除或添加名稱屬性。如果設置爲「是」,則如果DTD允許,則將名稱屬性(如果尚不存在)沿着現有ID屬性添加。如果設置爲「否」,則如果存在或已添加了id屬性,則會刪除任何現有名稱屬性。

+0

我真的需要--html選項嗎?它有什麼作用?我找不到任何細節。 – vangop

+0

我對[ - ](http://xmlsoft.org/XSLT/xsltproc2.html)的'--html'開關知之甚少。我認爲應該在使用格式不正確的HTML時使用它,並且可能包含對在(X)HTML中預定義的實體的引用,但不包含在XML中的實體。 – mzjn

1

我做了另一種方式 - 使整齊產生數字實體,而不是用-n選項命名。現在

$ tidy -asxml -i -n -w 150 -o o.xml index.xml 

我可以刪除--html選項,它的工作原理。 雖然我可以刪除該名稱屬性,但仍然奇怪爲什麼它被報告爲錯誤,雖然它是valid

+0

這是無效的。從鏈接到的頁面:「id'和'name'屬性共享相同的名稱空間,這意味着它們不能在同一個文檔中定義具有相同名稱的錨點。」 – mzjn

+0

不,請進一步閱讀,「下面的例子說明,當id和name都出現在元素的開始標記中時,它們必須是相同的:..」 – vangop

+0

這不是關於XHTML(它是XML)嗎? xsltproc是一個XML工具,它只是應用XML規則,規定每個元素只能有一個'ID'類型的屬性。見http://www.w3.org/TR/xhtml1/#h-4.10。 – mzjn