0

我正在尝试通过 XSL 将一些 HTML 文件转换为我自己的 XML 格式。

为此,我使用 HTML Tidy 清理输入文件,然后使用 html2xhtml 将它们转换为 xhtml,然后使用带有 msxsl 的 xsl 脚本将 xhtml 文件转换为我自己的格式。

但是,最后一步失败了,根本没有错误消息(这是语义上的失败;不是技术上的;-)):我的输出文件只包含空标签

我之前遇到过这样的问题,并从 html 标记中删除了 xmlns 属性,这导致几乎所有在线转换器都能正确处理我的文件。MSXSL 现在写入以下错误消息:“不支持在 DTD 中使用默认命名空间声明属性”。

在这里找到我使用的文件:http: //pastie.org/5483087

先感谢您!

4

1 回答 1

1

这就是 XSLT 和 XPath 1.0 的常见问题解答,输入 XHTML 文档中的元素位于名称空间中,而 XSLT 没有考虑到这一点。您需要将其更改为例如

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="xhtml">
<xsl:template match="/">

  <stellenausschreibung>
    <hochschule><xsl:value-of select="//xhtml:div[@id='contentText']/xhtml:img/@alt" /></hochschule>
    <anbieter><xsl:value-of select="//xhtml:p[@id='ad_employer']" /></anbieter>
    <typ><xsl:value-of select="//xhtml:h1" /></typ>
    <bewerbungsschluss><xsl:value-of select="//xhtml:span[@id='ad_bewerbungsschluss']" /></bewerbungsschluss>
    <erscheinungsdatum><xsl:value-of select="//xhtml:span[@class='job_published_at']" /></erscheinungsdatum>

    <inhalt><xsl:value-of select="//xhtml:p[@id='ad_job']" /></inhalt>
  </stellenausschreibung>

</xsl:template>
</xsl:stylesheet>

样式表中使用的 XHTML 命名空间的前缀(在我的示例中xhtml)当然可以自由选择,但必须使用一个前缀,就像 XSLT/XPath 1.0 一样,例如//p总是选择p没有命名空间中的元素的路径。

于 2012-12-05T10:22:53.207 回答