xsltproc html文件

时间:2011-07-31 05:48:53

标签: html xslt tidy

我正在尝试清理一些htmls。我已将它们转换为带有整洁的

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

生成的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添加到xsltproc,它会对名称和id属性具有相同名称(有效)的标记进行投诉

$ 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工作?为什么抱怨?或者我应该忘记它并修复实体?

2 个答案:

答案 0 :(得分:1)

我做了另一种方式 - 整理生成数字实体,而不是用-n选项命名。

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

现在我可以删除--html选项,它可以工作。 虽然我可以删除该name属性,但仍然想知道为什么它被报告为错误,尽管它是valid

答案 1 :(得分:0)

我假设不明确的问题是:我知道如何在运行xsltproc(添加--html)时避免“实体'XXX'未定义”错误。但是我如何摆脱“ID YYY已定义”?

Tidy的最新版本有anchor-as-name选项。您可以将其设置为“否”以删除不需要的name属性:

  

此选项控制在可用作锚点的元素中删除或添加name属性。如果设置为“yes”,则在DTD允许的情况下,将沿现有id属性添加name属性(如果尚未存在)。如果设置为“no”,则在存在或已添加id属性时,将删除任何现有的name属性。