0

以下の場合の xsl 変換の作成に問題があります。

<text>
<data>
<Object class="CENTRE" Name="Country-1/CENTRE-1/RTY-1" version="1">
    <p name="Map">20</p>
    <p name="Required">0</p>
</Object>
<Object class="LEFT" Name="Country-1/LEFT-1/RTY-1" version="1">
    <p name="Map">20</p>
    <p name="Required">0</p>
</Object>
<Object class="RIGHT" Name="Country-1/RIGHT-1/UIO-1" version="1">
    <p name="Map">20</p>
    <p name="Required">0</p>
</Object>
</data>
</text>

上記のスニペットでは、次のことを行う必要があります。

  1. クラス属性がCENTERの要素を検索
  2. また、class 属性値のCENTERSIDEに置き換え、 Name属性値の部分文字列を Country-1/ CENTER -1/RTY-1 から Country-1/ SIDE -1/RTY-1** に置き換えます。
  3. 残りの要素は影響を受けず、そのまま保持する必要があります。

replace-all-string のメソッドを使用して部分文字列の置換を試みましたが、失敗しました。前もって感謝します

出力 xml は次のようになります。

<text>
<data>
<Object class="SIDE" Name="Country-1/SIDE-1/RTY-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
<Object class="LEFT" Name="Country-1/LEFT-1/RTY-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
<Object class="RIGHT" Name="Country-1/RIGHT-1/UIO-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
</data>
</text>
4

1 に答える 1

1

これを試して:

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

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

    <xsl:template match="Object[@class = 'CENTRE' ]">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:attribute name="class">
                <xsl:value-of select="'SIDE'"/>
            </xsl:attribute>
            <xsl:attribute name="Name">
                <xsl:value-of select="concat(substring-before( @Name,'CENTRE' ), 'SIDE', substring-after( @Name, 'CENTRE'))"/>
            </xsl:attribute>
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

次の出力が生成されます。

<text>
    <data>
        <Object class="SIDE" Name="Country-1/SIDE-1/RTY-1" version="1">
            <p name="Map">20</p>
            <p name="Required">0</p>
        </Object>
        <Object class="LEFT" Name="Country-1/LEFT-1/RTY-1" version="1">
            <p name="Map">20</p>
            <p name="Required">0</p>
        </Object>
        <Object class="RIGHT" Name="Country-1/RIGHT-1/UIO-1" version="1">
            <p name="Map">20</p>
            <p name="Required">0</p>
        </Object>
    </data>
</text>
于 2013-05-08T17:58:51.870 に答える