-1

次のようなxmlがあります。

<field index="1" name="my_field_1" type="String">
<value>Value of Field 1</value>
</field>

<field index="2" name="my_field_2" type="String">
<value>Value of Field 2</value>
</field>

<field index="3" name="my_field_3" type="String">
<value>Value of Field 3</value>
</field>

後で各フィールドを繰り返し処理し、フィールドの名前(同じ)を取得して、インデックス属性(異なる要素の数によって異なります)と連結しようとします。

これを試しました(エスケープする方法がわからなかったので、変数にアポストロフィを入れました)。

<xsl:variable name="currentIndex" select="@index"></xsl:variable>
            <xsl:variable name="apostrof">'</xsl:variable>

<xsl:value-of select="concat(
'//field[@name=',
$apostrof,
'sar_account_entrepreneur_name_',
@index,
$apostrof,
']/value')"/>

問題は、これが値を選択する代わりに、文字通り文字列 my_field_1 だけを出力することです。出力は、フィールド 1 の値、フィールド 2 の値などである必要があります。代わりに必要なのは、name 属性と index 属性を動的に連結することです。

4

2 に答える 2

0

次の変換

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:for-each select="field">
            <xsl:value-of select="value" />
        </xsl:for-each>
    </xsl:template>
</xsl:transform>

この入力に適用

<?xml version="1.0" ?>
<root>
<field index="1" name="my_field_1" type="String">
    <value>Value of Field 1</value>
</field>

<field index="2" name="my_field_2" type="String">
    <value>Value of Field 2</value>
</field>

<field index="3" name="my_field_3" type="String">
    <value>Value of Field 3</value>
</field>
</root>

の目的の出力を生成します

<?xml version="1.0"?>
Value of Field 1Value of Field 2Value of Field 3

これがお役に立てば幸いです。それ以外の場合は、コメントでヒントを教えてください。

于 2012-07-10T08:29:22.293 に答える
0

答えはかなり単純でした:

このコードはインデックスattrを取り、それを名前に連結します。

于 2012-07-10T13:21:47.913 に答える