我有一个基于 openerp 的 web 服务生成的 xml,它包含许多元素的前缀 pp。我想通过选择许多元素使用 xslt 将该 xml 文件转换为另一个 xml。当我尝试执行转换时,它向我显示前缀 pp 的错误“元素的前缀 xsl 未绑定”。我无法声明 pp,因为它在许多答案中都有描述,我怎么能忽略它的使用字首?
问问题
11824 次
2 回答
1
XPath 提供了pp:*
语法来选择具有特定名称空间 URI 的所有元素/属性,而不管它们的本地名称如何,但不能(直接)选择具有特定本地名称的所有元素/属性,而不管名称空间如何。如果您事先不知道命名空间 URI 将是什么,那么
pp:foo/pp:bar
你必须使用类似的技巧
*[local-name() = 'foo']/*[local-name() = 'bar']
文档使用“pp”作为前缀这一事实无关紧要,对于 XPath 和 XSLT(以及任何其他可识别名称空间的 XML 处理工具)而言,重要的是元素的本地名称及其名称空间 URI。前缀只是一个允许解析器将正确的命名空间 URI 附加到每个节点的设备。
于 2013-06-10T16:47:51.367 回答
1
我找到了解决这个问题的方法。我们可以使用这个 XSLT 转换来忽略 XML 文件中的所有命名空间和前缀:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()[not(self::*)]">
<xsl:copy/>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
于 2013-06-15T11:15:18.523 回答