【问题标题】:xsltproc html documentsxsltproc html 文档
【发布时间】:2011-07-31 05:48:52
【问题描述】:

我正在尝试清理一些 html。我已经把它们转换成 xhtml 了

$ 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

如果我将 --html 添加到 xsltproc,它会抱怨具有相同名称的 name 和 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 不起作用?它为什么抱怨?还是我应该忘记它并修复实体?

【问题讨论】:

  • 那么问题是什么?我没有看到。

标签: html xslt tidy


【解决方案1】:

我采用了另一种方式——让 tidy 生成数字实体,而不是使用 -n 选项命名。

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

现在我可以删除 --html 选项并且它可以工作。 虽然可以去掉那个name属性,但是还是想知道为什么会报错,虽然是valid

【讨论】:

  • 无效。从您链接到的页面:“idname 属性共享相同的名称空间。这意味着它们不能在同一文档中定义具有相同名称的锚点”。
  • 不,请进一步阅读,“以下示例说明当 id 和 name 都出现在元素的开始标记中时,它们必须相同:..”
  • 这不是关于 XHTML(即 XML)吗? xsltproc 是一种 XML 工具,它只是应用 XML 规则,该规则规定每个元素只能有一个 ID 类型的属性。见w3.org/TR/xhtml1/#h-4.10
【解决方案2】:

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

最近构建的 Tidy 有一个 anchor-as-name 选项。您可以将其设置为“否”以删除不需要的 name 属性:

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

【讨论】:

  • 我真的需要 --html 选项吗?它有什么作用?我找不到它的任何细节。
  • 我对@9​​87654325@ 开关的了解并不多于this。我想应该在处理格式不正确的 HTML 并且可能包含对 (X)HTML 中预定义但 XML 中未预定义的实体的引用时使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2013-07-16
  • 2010-10-05
相关资源
最近更新 更多