请考虑以下示例。我必须在setData中更改属性的值
<system>
<Groups>
<Group id="01" check="true">
<name>Value</name>
<age>test</age>
<setData>
<data type="module">module</data>
<data enabled="true">true</data>
</setData>
</Group>
<Group id="02" check="true">
<name>Value</name>
<age>test</age>
<setData>
<data type="module">module</data>
<data enabled="true">true</data>
</setData>
</Group>
</Groups>
</system>
我必须将id为“ 01”的组中的“已启用”属性值更新为“ false”
所以预期的输出是
<Group id="01" check="true">
<name>Value</name>
<age>test</age>
<setData>
<data type="module">module</data>
<data enabled="false">false</data>
</setData>
</Group>
下面是我使用的XL样式表。有人可以帮忙吗?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="groupId" />
<xsl:param name="isEnabledStatus" />
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="setData" >
<xsl:call-template name="identity" />
<xsl:if test="@data = enabled">
<plan id="{$groupId}">
<xsl:attribute name="enabled"><xsl:value-of select="$isEnabledStatus"/></xsl:attribute>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
对于您的口头描述,我只会使用
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Group[@id = '01']/setData/data[@enabled = 'true']">
<data enabled="false">false</data>
</xsl:template>
</xsl:stylesheet>
https://xsltfiddle.liberty-development.net/bdxtqi
如果您还需要显示的参数,则需要说明所需的参数以及要将其设置为哪些值。