1

次の形式のxmlがあります。

<?xml version="1.0" encoding="UTF-8"?>
<query>
    <queryParams name="accountID">Star TV</queryParams>
    <queryParams name="assetID">Friends</queryParams>
    <queryParams name="accountExtRef">Tata</queryParams>
</query>

私は別のxsltが必要です:

  1. 結果の xml が次のようになるように、name="providerID" を name="ContentProvider" に置き換えます。

    <?xml version="1.0" encoding="UTF-8"?>
    <query>
        <queryParams name="companyID">Star TV</queryParams>
        <queryParams name="assetID">Friends</queryParams>
        <queryParams name="accountExtRef">Tata</queryParams>
    </query>
    
  2. XML が次のようになるように、「Star TV」を Colors に置き換えます。

        <?xml version="1.0" encoding="UTF-8"?>
        <query>
            <queryParams name="accountID">Colors</queryParams>
            <queryParams name="assetID">Friends</queryParams>
            <queryParams name="accountExtRef">Tata</queryParams>
        </query>
    

助けてください。

4

1 に答える 1

1

これは、必要な変更に合わせて追加のテンプレートを恒等変換に追加するだけで実行できます。

<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="queryParams/@name[. = 'accountID']">
      <xsl:attribute name="name">companyID</xsl:attribute>
   </xsl:template>

   <xsl:template match="queryParams/text()[. = 'Star TV']">
      <xsl:text>Colors</xsl:text>
   </xsl:template>
</xsl:stylesheet>

サンプル XML に適用すると、次のように出力されます。

<query>
   <queryParams name="companyID">Colors</queryParams>
   <queryParams name="assetID">Friends</queryParams>
   <queryParams name="accountExtRef">Tata</queryParams>
</query>

この場合、両方の変更を一度に行いますが、必要に応じてこれを 2 つの個別の XSLT に分割する方法は十分に明確です。

于 2012-04-11T11:40:07.003 に答える