我有以下xmldata输入,应该通过xslt进行转换。 我只想提取ns:内容。 dynamicNS命名空间在运行时可能不同。
<?xml version="1.0"?>
<dynamicNS:header>
<ns:something>
<ns:myid>1</ns:myid>
<ns:myvalue>2</ns:myvalue>
</ns:something>
</dynamicNS:header>
输出应为:
<?xml version="1.0"?>
<ns:something>
<ns:myid>1</ns:myid>
<ns:myvalue>2</ns:myvalue>
</ns:something>
我尝试过:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<ns:something>
<xsl:copy-of select="node()"/>
</ns:something>
</xsl:template>
</xsl:stylesheet>
但是这给了我错误:元素“dynamicNS:header”的前缀“dynamicNS”没有绑定。
我不想为dynamicNS添加命名空间,因为每次运行都可能有所不同。
获得所需输出的正确方法是什么?
谢谢你们。
答案 0 :(得分:0)
如果要省略根元素及其名称空间声明,只复制其子元素,那么在XSLT 2及更高版本中,您可以使用
制作根目录的所有子元素的副本,例如输入
<dynamicNS:header xmlns:dynamicNS="http://example.com/foo">
<ns:something xmlns:ns="http://example.com/ns">
<ns:myid>1</ns:myid>
<ns:myvalue>2</ns:myvalue>
</ns:something>
</dynamicNS:header>
转换为结果
<ns:something xmlns:ns="http://example.com/ns">
<ns:myid>1</ns:myid>
<ns:myvalue>2</ns:myvalue>
</ns:something>
http://xsltransform.hikmatu.com/gWcDMee
正如我在评论中已经说过的,XSLT的输入和样式表代码都需要是名称空间格式良好的XML文档,因此您在问题中发布的输入和输出带有前缀,而没有名称空间声明存在不允许进行XSLT处理。