我有一个由基于openerp的webservice生成的xml文件,其中许多元素都带有前缀pp。我希望通过使用xslt选择多个元素将该xml文件转换为另一个xml文件。 当我尝试执行转换时,它显示错误“元素的前缀xsl未绑定”用于前缀pp。 我无法像许多答案中描述的那样声明pp,我该如何忽略该前缀的使用?
我有一个由基于openerp的webservice生成的xml文件,其中许多元素都带有前缀pp。我希望通过使用xslt选择多个元素将该xml文件转换为另一个xml文件。 当我尝试执行转换时,它显示错误“元素的前缀xsl未绑定”用于前缀pp。 我无法像许多答案中描述的那样声明pp,我该如何忽略该前缀的使用?
<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>
pp:*
语法来选择具有特定命名空间URI的所有元素/属性,而不考虑它们的本地名称,但不能(直接)选择具有特定本地名称而不考虑命名空间的所有元素/属性。如果您事先不知道命名空间URI将是什么,则可以使用以下方法:pp:foo/pp:bar
你必须使用像这样的技巧
*[local-name() = 'foo']/*[local-name() = 'bar']
select
和match
表达式中使用这个技巧。如果没有看到XML和当前XSLT的示例,就无法更加具体地说明问题。 - Ian Roberts