我的输入xml
<ns1:TrackingResponse xmlns:ns1="http://sample/response">
<TC10000004SF>
<client_request>
<id>402919</id>
<client_order_id>66967604933444</client_order_id>
<awb_number>TC10000004SF</awb_number>
</client_request>
</TC10000004SF>
<TC10000005SF>
<client_request>
<id>402919</id>
<client_order_id>66967604933444</client_order_id>
<awb_number>TC10000005SF</awb_number>
</client_request>
</TC10000005SF>
我希望输出xml像
<TrackingResponse>
<AWBNumber>
<client_request>
<id>402919</id>
<client_order_id>66967604933444</client_order_id>
<awb_number>TC10000004SF</awb_number>
</client_request>
</AWBNumber>
<AWBNumber>
<client_request>
<id>402919</id>
<client_order_id>66967604933444</client_order_id>
<awb_number>TC10000005SF</awb_number>
</client_request>
</AWBNumber>
</TrackingResponse>
我们现在使用了以下xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="*[starts-with(local-name(),'TC')]">
<AWBNumber>
<xsl:apply-templates select="node()"/>
</AWBNumber>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name(.)}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
由于我们正在硬编码SF,我们想要使用一些其他方法从节点获取值,然后进行模板匹配和节点重命名。我想这个要求需要xslt 2.0或3.0。请帮我一下。
答案 0 :(得分:0)
你不能简单地做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*/*">
<AWBNumber>
<xsl:apply-templates/>
</AWBNumber>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>