下面的xslt代码不适用于下面的XML文件。但是,如果我从xml文件中的“objects”节点中删除命名空间属性,它将按预期工作。如何修复xslt代码,以便在根节点中具有命名空间属性时它将起作用?首先发布,抱歉如果格式搞砸了。感谢
XML文件:
<objects xmlns="http://www.spicefactory.org/parsley"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<object id="models" type="blah">
</object>
</objects>
XSLT代码:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="no"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="object">
<object new_attr="attr value ">
<xsl:apply-templates select="node()|@*"/>
</object>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:11)
您需要在xslt:
中声明并使用相同的xml命名空间<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sfp="http://www.spicefactory.org/parsley">
<xsl:output method="xml" indent="no"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="sfp:object">
<sfp:object new_attr="attr value ">
<xsl:apply-templates select="node()|@*"/>
</sfp:object>
</xsl:template>
</xsl:stylesheet>