源XML:
<books xmlns="www.flipkart.com" xmlns:sport="www.flipkart.com/sports">
<book xmlns:sport="www.flipkart.com/sports" xmlns:bio="www.flipkart.com/sports/bio">
<name>Open</name>
<author>Agassi</author>
</book>
<book xmlns:sport="www.flipkart.com/sports" xmlns:bio="www.flipkart.com/sports/bio">
<name>Bounce</name>
<author>Matthew Syed</author>
</book>
</books>
XSLT:
复制源xml而不做任何更改
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:template match="/">
<xsl:copy-of select="/"/>
</xsl:template>
</xsl:stylesheet>
输出:
父和子之间的公共命名空间不会出现
<books xmlns="www.flipkart.com" xmlns:sport="www.flipkart.com/sports">
<book xmlns:bio="www.flipkart.com/sports/bio">
<name>Open</name>
<author>Agassi</author>
</book>
<book xmlns:bio="www.flipkart.com/sports/bio">
<name>Bounce</name>
<author>Matthew Syed</author>
</book>
</books>
我想要的行为是复制源xml而没有任何改变。转换后的常用命名空间(xmlns:sport =&#34; www.flipkart.com/sports")在父级&#34;书籍&#34;之间。和孩子&#34;书&#34;没有出现在输出
中预期:
<book xmlns:sport="www.flipkart.com/sports" xmlns:bio="www.flipkart.com/sports/bio">
实际值:
<book xmlns:bio="www.flipkart.com/sports/bio">
如何在输出中包含子命名空间?
由于
答案 0 :(得分:2)
XSLT / XQuery / XPath数据模型不允许您区分
<foo xmlns:pf="http://example.com/"><bar>...</bar></foo>
和
<foo xmlns:pf="http://example.com/"><bar xmlns:pf="http://example.com/">...</bar></foo>
如果需要区分这些情况,则需要查看DOM,其中命名空间声明被建模为属性,但您当然还需要查找或编写DOM树的序列化程序,以确保任何名称空间声明属性都被序列化
答案 1 :(得分:1)
你不是在谈论&#34;子命名空间&#34;但关于命名空间声明,它在源文档中包含三次 - 并且不在任何地方使用。在这些情况下,处理器可能决定执行以下任一操作:
所有这些行动都是&#34;正确&#34;。
我想要的行为是复制源xml,没有任何改变。
为什么要进行转型呢?