xslt用另一个替换xml属性,用另一个替换值

时间:2012-04-11 11:20:12

标签: xslt

我有以下形式的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. 将name =“providerID”替换为name =“ContentProvider”,以便 结果xml变为:

    <?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成为

        <?xml version="1.0" encoding="UTF-8"?>
        <query>
            <queryParams name="accountID">Colors</queryParams>
            <queryParams name="assetID">Friends</queryParams>
            <queryParams name="accountExtRef">Tata</queryParams>
        </query>
    
  3. 请帮忙。

1 个答案:

答案 0 :(得分: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>

在这种情况下,它会一次性完成两项更改,但如果需要,应该清楚如何将其拆分为两个单独的XSLT。