使用XML XSLT,如何更新XML内的特定数据?

时间:2018-08-03 09:00:25

标签: xml xslt xslt-1.0

请考虑以下示例。我必须在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>

1 个答案:

答案 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

如果您还需要显示的参数,则需要说明所需的参数以及要将其设置为哪些值。