我试图通过XSL将一些HTML文件转换成自己的XML格式。
为此目的,我使用HTML清理输入文件,然后用html2xhtml将它们转换为xhtml,然后使用带有msxsl的xsl脚本将xhtml文件转换为我自己的格式。
但是,最后一步失败了,根本没有错误消息(这是语义错误;不是技术错误;-):我的输出文件只包含空标记。
在此之前,我遇到了类似的问题,并从html标记中删除了xmlns属性,这使得几乎所有的在线转换器都能正确地处理我的文件。MSXSL现在写入以下错误消息:“不支持在DTD中使用默认命名空间声明属性”。
查找我在这里使用的文件:http://pastie.org/5483087
提前谢谢你!
发布于 2012-12-05 10:22:53
这就是使用XSLT1.0和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/XPath1.0,例如,//p总是在没有名称空间中选择p元素。
https://stackoverflow.com/questions/13720827
复制相似问题