MSXSL错误,几乎没有任何输出

时间:2012-12-05 10:15:37

标签: html xml xslt xhtml msxsl

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

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

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

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

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

提前谢谢!

1 个答案:

答案 0 :(得分:1)

这是使用XSLT和XPath 1.0的FAQ,输入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个元素。