2

@urlelement の属性を持つ XML ファイルがあります<matimage>。現在、@url属性に特定の画像名がありますtriangle.png。XSLT を適用し、この URL を次のように変更しますassets/images/triangle.png

次の XSLT を試しました。

<?xml version="1.0"?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" />

  <!-- Copy everything -->
  <xsl:template match="*">
    <xsl:copy>
     <xsl:copy-of select="@*" />
     <xsl:apply-templates />
   </xsl:copy>
  </xsl:template>

 <xsl:template match="@type[parent::matimage]">
   <xsl:attribute name="uri">
     <xsl:value-of select="NEW_VALUE"/>
   </xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

最初のステップとして、古い値を新しい値に置き換えようとしましたが、うまくいかないようでした。@url属性の既存の値に新しい値を追加または追加する方法を教えてください。

サンプル XML は次のとおりです。

   <material>
    <matimage url="triangle.png">
        Some text
    </matimage>
  </material>

望ましい出力:

   <material>
    <matimage url="assets/images/triangle.png">
        Some text
    </matimage>
  </material>
4

1 に答える 1

5

あなたが達成しようとしていることの解決策は次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

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

    <!-- Match all the attributes url within matimage elements -->
    <xsl:template match="matimage/@url">
        <xsl:attribute name="url">
            <!-- Use concat to prepend the value to the current value -->
            <xsl:value-of select="concat('assets/images/', .)" />
        </xsl:attribute>
    </xsl:template>

</xsl:stylesheet>
于 2013-02-18T11:22:32.753 に答える