我有这个XML文件:
<Response>
<errorCode>error Code</errorCode>
<errorMessage>msg</errorMessage>
<ResponseParameters>
<className>
<attribute1>a</attribute1>
<attribute2>b</attribute2>
</className>
</ResponseParameters>
</Response>
我希望输出为:
<className>
<attribute1>a</attribute1>
<attribute2>b</attribute2>
</className>
我当前的XSL文件还包含“ResponseParameters”标签,我不想这样做。
编辑:请注意,节点className是动态的。我不知道这个名字在运行时会是什么。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes" />
<xsl:template match="/">
<xsl:copy-of select="//ResponseParameters">
</xsl:copy-of>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:14)
使用:
<xsl:copy-of select="/Response/ResponseParameters/node()"/>
"//"
缩写非常昂贵(导致扫描完整的XML文档),应该避免。
答案 1 :(得分:0)
一种方法是将包含节点名称的参数传递给XSLT,并使用传入的参数和name()函数来匹配动态节点。
编辑:
但在这个简单的案例中,建议ResponseParameters // *或ResponseParameters / *的其他答案中的任何一个都是一个更简单的解决方案。
答案 2 :(得分:0)
<xsl:copy-of select="Response/ResponseParameters//*"/>