我正在尝试通过XSL将一些HTML文件转换为我自己的XML格式。
为此目的我使用HTML Tidy清理输入文件,然后使用html2xhtml 将它们转换为xhtml,然后使用带有msxsl的xsl脚本< / strong>将xhtml文件转换为我自己的格式。
然而,最后一步是失败而没有错误消息(这是语义上的失败;不是技术;-)):我的输出文件只包含空标记。
我之前遇到过这样的问题并从html标签中删除了xmlns属性,这导致几乎所有在线变换器都能正确处理我的文件。 MSXSL现在写入以下错误消息:“不支持在DTD中使用默认命名空间声明属性”。
找到我在这里使用的文件:http://pastie.org/5483087
提前谢谢!
答案 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
个元素。