通过XSLT创建或更新XML元素

时间:2015-03-04 16:40:19

标签: xml xslt

我需要一些帮助。 我有这样的XML:

<params>
    <param>
        <name>Q1</name>
        <value>A1</value>
    </param>
    <param>
        <name>Q99</name>
        <value>A99</value>
    </param>
    <param>
        <name>Q55</name>
        <value>A55</value>
    </param>
</params>

我需要XSLT才能找到 param 名称等于'Q33'。如果存在,则应更新为“A33_new”,如果不存在,则应添加下一个:

<param>
    <name>Q33</name>
    <value>A33_new</value>
</param>

1 个答案:

答案 0 :(得分:0)

使用身份识别转换复制所有内容

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

除了静态Q33参数

  <xsl:template match="param[name='Q33']"/>

并添加新的Q33参数(根据您的要求,确实是否存在于输入中):

  <xsl:template match="params">
    <xsl:copy>
      <xsl:apply-templates/>
      <param>
        <name>Q33</name>
        <value>A33_new</value>
      </param>
    </xsl:copy>
  </xsl:template>

<强>共

<?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:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="param[name='Q33']"/>

  <xsl:template match="params">
    <xsl:copy>
      <xsl:apply-templates/>
      <param>
        <name>Q33</name>
        <value>A33_new</value>
      </param>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>