0

入力 XML の構造は次のとおりです。

<catalog>
<cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
    <attributes>
        <attribute>
            <key>1</key>
            <value>one</value>
        </attribute>
        <attribute>
            <key>2</key>
            <value>two</value>
        </attribute>
    </attributes>
</cd>
<cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
    <attributes>
        <attribute>
            <key>1</key>
            <value>one</value>
        </attribute>
        <attribute>
            <key>2</key>
            <value>two</value>
        </attribute>
    </attributes>
</cd>
<cd>
    <title>Greatest Hits</title>
    <artist>Dolly Parton</artist>
    <country>USA</country>
    <company>RCA</company>
    <price>9.90</price>
    <year>1982</year>
    <attributes>
        <attribute>
            <key>1</key>
            <value>one</value>
        </attribute>
        <attribute>
            <key>2</key>
            <value>two</value>
        </attribute>
    </attributes>
</cd>
<cd>
    <title>Still got the blues</title>
    <artist>Gary Moore</artist>
    <country>UK</country>
    <company>Virgin records</company>
    <price>10.20</price>
    <year>1990</year>
    <attributes>
        <attribute>
            <key>1</key>
            <value>WON</value>
        </attribute>
        <attribute>
            <key>2</key>
            <value>two</value>
        </attribute>
    </attributes>
</cd>   
</catalog>

現在、{キー= 1および値= WON}(そのキーノードの兄弟である値ノード)のcdノードのみを選択して、別のxmlを作成しようとしています。複数の条件を適用しようとして、しばらくこれに固執していました。次のアプローチを試しました:

  1. 条件に一致するノードをコピーしてみてください
  2. ID コピーを実行し、条件に一致しないノードを無視する

これが実現可能かどうかわからないか、何か間違ったことをしています。私のxsltは次のようになります。

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

<xsl:variable name="KeyToBeMatched">1</xsl:variable>
<xsl:param name="ValueToBeMatched">WON</xsl:param>


<xsl:template match="catalog">

      <xsl:for-each select="cd">
        <xsl:for-each select="attributes/attribute[keu = $KeyToBeMatched]">
            <xsl:variable name="attributeValue" select="value"/>
                <xsl:if test="$attributeValue = $RMGAccountId"> 
                        <xsl:copy>
                            <xsl:apply-templates select="@*|*|text()" />
                        </xsl:copy>
                </xsl:if>
        </xsl:for-each>
      </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
4

3 に答える 3

1

これを試してください:

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

<xsl:variable name="KeyToBeMatched">1</xsl:variable>
<xsl:param name="ValueToBeMatched">WON</xsl:param>

<xsl:template match="list"> 
    <xsl:for-each select="cd">
        <xsl:for-each select="attributes/attribute[key = $KeyToBeMatched]">
            <xsl:variable name="attributeValue" select="value"/>
            <xsl:if test="$attributeValue = $ValueToBeMatched"> 
                <xsl:copy>
                    <xsl:apply-templates select="@*|*|text()" />
                </xsl:copy>
            </xsl:if>
        </xsl:for-each>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

変数「RMGAccountId」は宣言されていません。これを「ValueToBeMatched」と交換しました。また、Filypeが指摘したタイプミスも修正しました。次のXMLを取得するソースに適用されます。

<?xml version="1.0" encoding="UTF-8"?>
<attribute> 1 WON </attribute>
于 2012-04-12T07:07:55.643 に答える
0

誤字脱字あり

--------------------------------------------V---------------------
<xsl:for-each select="attributes/attribute[keu = $KeyToBeMatched]">
于 2012-04-12T05:00:48.170 に答える