0

属性値のみに基づいて特定の要素に変換ルールを適用し、残りはそのまま保持する XML ファイルがあります。

<bigdata>
<data>
    <Object class="QWE" Name="Country-1/State-1/QWE-1">
        <p name="Map">20</p>
        <p name="Required">0</p>
        <p name="Combined">68</p>
        <p name="State">0</p>
    </Object>
    <Object class="RTY" Name="Country-1/State-1/RTY-1">
        <p name="Map">20</p>
        <p name="Required">0</p>
        <p name="Combined">68</p>
        <p name="State">0</p>
    </Object>
    <Object class="UIO" Name="Country-1/State-1/UIO-1">
        <p name="Map">20</p>
        <p name="Required">0</p>
        <p name="Combined">68</p>
        <p name="State">0</p>
    </Object>
    <Object class="PAS" Name="Country-1/State-1/PAS-1">
        <p name="Map">20</p>
        <p name="Required">0</p>
        <p name="Combined">68</p>
        <p name="State">0</p>
    </Object>
</data>

上記の xml は以下の xml スニペットに変換する必要があります。ここで、class が QWE に等しい xml 要素 Object のみをPOSTに変更する必要があります。つまり、属性に基づいて最初の要素のみを変更する必要があります。これに関するアドバイスはありがたいです

    <bigdata>
<data>
    <Object class="POST" Name="Country-1/State-1/POST-1">
        <p name="Map">20</p>
        <p name="Required">0</p>
        <p name="Combined">68</p>
        <p name="State">0</p>
    </Object>
    <Object class="RTY" Name="Country-1/State-1/RTY-1">
        <p name="Map">20</p>
        <p name="Required">0</p>
        <p name="Combined">68</p>
        <p name="State">0</p>
    </Object>
    <Object class="UIO" Name="Country-1/State-1/UIO-1">
        <p name="Map">20</p>
        <p name="Required">0</p>
        <p name="Combined">68</p>
        <p name="State">0</p>
    </Object>
    <Object class="PAS" Name="Country-1/State-1/PAS-1">
        <p name="Map">20</p>
        <p name="Required">0</p>
        <p name="Combined">68</p>
        <p name="State">0</p>
    </Object>
</data>

4

2 に答える 2

0

上記の xml を変換するには、次の XSLT を使用します。

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="@class[parent::Object]">
    <xsl:choose>
      <xsl:when test=".='QWE'">
        <xsl:attribute name="class">
          <xsl:value-of select="'POST'"/>
        </xsl:attribute>
      </xsl:when>
      <xsl:otherwise>
        <xsl:attribute name="class">
          <xsl:value-of select="."/>
        </xsl:attribute>
      </xsl:otherwise>
    </xsl:choose>

  </xsl:template>

詳細については、これを参照してください。

XSLT: <xsl:copy> 中に属性値を変更する方法は?

于 2013-05-07T13:34:11.803 に答える