2016-10-07 20 views
0

私はXSLTを初めて使用しています。値に基づいてXSLT属性が変更される

私は現在、以下のフォーマットの多数のコピーで構成されていXML持っている:私は使命を帯びてきた何

  <item:items> 
      <item:item action="ingest" id="USAUS868509"> 
       <item:itemID>1157245</item:itemID> 
       <item:spotType>commercial</item:spotType> 
      </item:item> 
      <item:items> 

は、id属性の値を交換することです。私はコードの数値部分に基づいてこの値を変更する必要があります。値が850000より大きい場合は、形式をUSA868509に変更する必要があります。値が850000より小さい場合は、id値を変更して数値のみを含めるようにします。 XMLの残りの値はまったく同じになるはずです。

私は現在、以下のXSLTを持っている:

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

      <xsl:template match="//items/item[@id]"> 
       <xsl:choose> 
        <xsl:when test="substring(id,5) &gt;= 845986"> 
         <xsl:attribute name="id"> 
          <xsl:value-of select="substring(id,5)"/> 
         </xsl:attribute> 
        </xsl:when> 
        <xsl:otherwise> 
         <xsl:attribute name="id"> 
          <xsl:value-of select="id"/> 
         </xsl:attribute> 
        </xsl:otherwise> 
       </xsl:choose> 
      </xsl:template> 

私はトラブルXSLTは変数のためにループしませんので、私は変更したい値を特定するが生じています。このロジックを持つように私のXSLTを変更する方法はありますか?

+0

名前の要素が '項目であることに注意してください:items'は、式' items'によって選択することができません。ネームスペースの宣言とXSLTでの接頭辞の使用法を読んでおく必要があります。 –

答えて

0

私たちは、次の整形入力例ましょう:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="@id"> 
    <xsl:variable name="code" select="substring(., 6)" /> 
    <xsl:attribute name="id"> 
     <xsl:if test="$code >= 850000">USA</xsl:if> 
     <xsl:value-of select="$code" /> 
    </xsl:attribute> 
</xsl:template> 

</xsl:stylesheet> 
次のスタイルシートを適用する

XML

<items> 
    <item action="ingest" id="USAUS849999"> 
    <itemID>1157245</itemID> 
    <spotType>commercial</spotType> 
    </item> 
    <item action="ingest" id="USAUS850001"> 
    <itemID>1157246</itemID> 
    <spotType>commercial</spotType> 
    </item> 
</items> 

は、この結果を生成します:

<?xml version="1.0" encoding="UTF-8"?> 
<items> 
    <item action="ingest" id="849999"> 
     <itemID>1157245</itemID> 
     <spotType>commercial</spotType> 
    </item> 
    <item action="ingest" id="USA850001"> 
     <itemID>1157246</itemID> 
     <spotType>commercial</spotType> 
    </item> 
</items> 
+0

パーフェクト。ありがとうございました! – user6391187

関連する問題