2011-07-31 5 views
2

私はいくつかのhtmlをきれいにしようとしています。私は整頓してxhtmlに変換しましたxsltproc html文書

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

最終的に得られたxhtmlは名前付きエンティティを持ちます。 これらのxhtmlで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 

私はそれが(有効である)と同じ名前を持つ属性の名前とIDを持つタグに文句を言うのxsltprocに--html追加する場合

$ 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を実行しているときにエンティティ 'XXX'が定義されていないというエラーを回避する方法を知っています(--htmlを追加してください)。しかし、 "ID YYYは既に定義されています"を取り除くにはどうすればよいですか?

最近のTidyビルドにはanchor-as-nameオプションがあります。これを「いいえ」に設定して、不要なname属性を削除することができます。

このオプションは、アンカーとして機能できる要素の名前属性の削除または追加を制御します。 "yes"に設定されている場合、name属性が存在しない場合は、既存のid属性に沿って追加されます(DTDで許可されている場合)。 "no"に設定すると、id属性が存在する場合、または追加されている場合、既存の名前属性はすべて削除されます。

+0

本当に--htmlオプションが必要ですか?それは何をするためのものか?私はそれについて詳細を見つけることができませんでした。 – vangop

+0

私は '--html'スイッチについては、[this](http://xmlsoft.org/XSLT/xsltproc2.html)より詳しくは分かりません。私は整形式ではなく、(X)HTMLではあらかじめ定義されているがXMLでは定義されていないエンティティへの参照を含む可能性のあるHTMLを扱うときに使用する必要があると思います。 – mzjn

1

これは、-nオプションではなくむしろ数値エンティティを生成しました。

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

今私は--htmlオプションを削除することができ、それが動作します。 名前属性を削除することはできますが、それでもエラーとして報告される理由はまだ不明ですvalid

+0

これは無効です。あなたがリンクしているページから:「id属性とname属性は同じ名前空間を共有します。つまり、同じ文書内に同じ名前のアンカーを定義することはできません。 – mzjn

+0

いいえ、次の例では、要素の開始タグにIDと名前が同じである必要があることを示しています。 " – vangop

+0

XML(XHTML)ではありませんか? xsltprocはXMLツールであり、エレメントごとにIDタイプの属性が1つしかないというXMLルールを適用するだけです。 http://www.w3.org/TR/xhtml1/#h-4.10を参照してください。 – mzjn

関連する問題