XSLT命名空间和默认命名空间问题
我不熟悉XSLT转换。我的输出xml中存在名称空间映射问题 输入XML是XSLT命名空间和默认命名空间问题,xslt,Xslt,我不熟悉XSLT转换。我的输出xml中存在名称空间映射问题 输入XML是 你好 所以您不想删除“class”元素的名称空间,而是想更改它。使用xsl:element节点的“namespace”属性 而不是 <xsl:element name="{local-name()}"> 你想要 <xsl:element name="{local-name()}" namespace="http://www.neededNamespace.com"> 你真的需要这些代码吗
你好
所以您不想删除“class”元素的名称空间,而是想更改它。使用xsl:element节点的“namespace”属性
而不是
<xsl:element name="{local-name()}">
你想要
<xsl:element name="{local-name()}" namespace="http://www.neededNamespace.com">
你真的需要这些代码吗?或者你只是把它当作咒语,希望它能以某种方式安抚邪恶的灵魂?像
xpath默认名称空间
在XSLT1.0样式表中做什么?(回答:要么什么都没有,要么产生致命错误-取决于处理器的容忍度)
现在,如果您的XML示例具有代表性,那么您需要做的就是:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.neededNamespace.com">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<school>
<xsl:apply-templates/>
</school>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
它的作用是:
的新根元素李>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
这假设属性不在名称空间中——这是一个非常合理的假设。属性不继承其父级的命名空间,而且您很少看到作者显式地将属性放置在命名空间中。只有当您真的需要预测这种可能性时,您才需要额外的代码来处理属性。感谢bjimba的宝贵意见。在包含您提到的名称空间值之后。我得到了下面的输出,这是出乎意料的<代码>注意,我在学校和班级之间还有一些其他名称空间的标记和元素。我不知道为什么这不是预期的。它们现在位于正确的名称空间中。根据XSL处理器的不同,这样说可能会比您希望的更详细。这里您应该密切关注Michael的答案,它比我快速指向xsl:element的namespace属性的指针要详细得多。花时间通过一个好的网站(甚至是一本书)来理解XML名称空间是值得的,搜索“XSLT默认名称空间”并找到666个落入相同陷阱的人。