在我之前的问题“从 XML 到 XML 文档的 XSLT 转换”的上下文中。此外,如果“dataset/type/text() ='test'”的值,我试图将“ <value>
”元素重命名为“ <sName>
”,同时将值更新为“ABC”。我为相同的代码编写了下面的代码,但它没有按预期工作。请帮忙。
源 XML-
<soapenv:Header/>
<soapenv:Body>
<v1:QueryRequest version="1">
<subject>
<dataList>
<!--1 or more repetitions:-->
<dataset>
<type>company</type>
<value>abc</value>
</dataset>
<dataset>
<type>user</type>
<value>xyz</value>
</dataset>
</dataList>
</subject>
<testList>
<!--1 or more repetitions:-->
<criteria>
<type>test</type>
<value>1234</value>
</criteria>
<criteria>
<type>test2</type>
<value>false</value>
</criteria>
</testList>
</v1:QueryRequest>
</soapenv:Body>
</soapenv:Envelope>
XSL 文件:-
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:old="http://www.abc.com/s/v1.0"
exclude-result-prefixes="old"
xmlns:v2="http://www.abc.com/s/v2.0">
<xsl:output method="xml" encoding="utf-8" indent="yes"
version="1.0" />
<xsl:param name="newversion" select="'2.0'" />
<xsl:param name="ABC" select="'ABC'" />
<xsl:param name="XYZ" select="'XYZ'" />
<xsl:param name="DFG" select="'DFG'" />
<!-- fix namespace declarations on root element -->
<xsl:template match="/*">
<xsl:element name="{name()}" namespace="{namespace-uri()}">
<!-- copy the v2: binding from the stylesheet document -->
<xsl:copy-of select="document('')/xsl:stylesheet/namespace::v2" />
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<!-- replace namespace of elements in old namespace -->
<xsl:template match="old:*">
<xsl:element name="v2:{local-name()}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="old:QueryRequest/@version">
<xsl:attribute name="version">
<xsl:value-of select="$newversion" />
</xsl:attribute>
</xsl:template>
<xsl:template match="criteria[type='service']/value">
<xsl:choose>
<xsl:when test="criteria[type='service']/value/text()='1234'">
<xsl:element name="sName">
<xsl:value-of select="$ABC"/>
</xsl:element>
</xsl:when>
<xsl:when test="criteria[type='service']/value/text()='5464'">
<xsl:element name="sName">
<xsl:value-of select="$XYZ"/>
</xsl:element>
</xsl:when>
<xsl:when test="criteria[type='service']/value/text()='8755'">
<xsl:element name="sName">
<xsl:value-of select="$DFG"/>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="type/text()">
<xsl:value-of
select="translate(., 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
</xsl:template>
</xsl:stylesheet>
预期输出:
<testList>
<criteria>
<type>test</type>
<sName>ABC</sName>
</criteria>
<criteria>
<type>test2</type>
<value>false</value>
</criteria>
</testList>