1

以前の私の同様の投稿を許してください。すばらしいフィードバックから学ぶことができたと思いますが、それでもXPathに少し苦労しています。繰り返しになりますが、同様の投稿でごめんなさい!

現在のXML

<?xml version="1.0" encoding="utf-8" ?>
<data>
    <table_1 dropdown1="Item1"></table_1>
    <listitems key1="Item1" name="" key2="Id2"/>
    <listitems key1="Item1" name="Item A" key2="Id2"/>
    <listitems key1="Item1" name="Item B" key2="Id2"/>
    <listitems key1="Item1" name="" key2="Id4"/>
    <listitems key1="Item1" name="Item A" key2="Id4"/>
    <listitems key1="Item1" name="Item B" key2="Id4"/>
    <listitems key1="Item2" name="" key2="Id6"/>
    <listitems key1="Item2" name="Item C" key2="Id6"/>
    <listitems key1="Item2" name="Item D" key2="Id6"/>
</data>

現在のXSL

<xsl:template match="/">
    <html>
        <head>
            <title>Untitled</title>
        </head>
        <body>
            <xsl:for-each select="/data/listitems[@key1=/data/table_1/@dropdown1]">
                <xsl:value-of select="@name"/>                    
                <br/>
            </xsl:for-each>

        </body>
    </html>
</xsl:template>

<xsl:template match="listitems">
    <xsl:value-of select="concat(@name, ' ')" />
</xsl:template>

現在の結果:

ここに画像の説明を入力してください

4

1 に答える 1

1

<listitems>重複と同じ属性を持つ要素を検討すると仮定するとname、XPathのpreceding-sibling軸を使用して、重複している要素を無視できます。

<xsl:for-each select="/data/listitems[@key1=/data/table_1/@dropdown1][not(@name = preceding-sibling::listitems/@name)]">

つまり、選択したすべてのアイテムを選択しますが、テスト対象の要素と同じ値の属性を持つ先行<listitems>する兄弟要素がないという追加の制限があります。name

于 2012-08-02T20:56:34.693 に答える