0

必要なスタイルシートはrefer.xmlを参照する必要があり、input.xmlからその要素の値のみを取得する必要があります。どうやってするか

リクエストであるInput.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
</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>
</cd>
<cd>
    <title>Greatest Hits</title>
    <artist>Dolly Parton</artist>
    <country>USA</country>
    <company>RCA</company>
    <price>9.90</price>
    <year>1982</year>
</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>
</cd>
<cd>
    <title>Eros</title>
    <artist>Eros Ramazzotti</artist>
    <country>EU</country>
    <company>BMG</company>
    <price>9.90</price>
    <year>1997</year>
</cd>
<cd>
    <title>One night only</title>
    <artist>Bee Gees</artist>
    <country>UK</country>
    <company>Polydor</company>
    <price>10.90</price>
    <year>1998</year>
</cd>
<cd>
    <title>Romanza</title>
    <artist>Andrea Bocelli</artist>
    <country>EU</country>
    <company>Polydor</company>
    <price>10.80</price>
    <year>1996</year>
</cd>
<cd>
    <title>When a man loves a woman</title>
    <artist>Percy Sledge</artist>
    <country>USA</country>
    <company>Atlantic</company>
    <price>8.70</price>
    <year>1987</year>
</cd>
</catalog>

refer.xml-ここでは、入力からの要素があります

<catalog>
<cd>
    <country name="USA">
    <title>When a man loves a woman</title>
    <title>Greatest Hits</title>
    </country>
    <country name="UK">
    <title>Still got the blues</title>
    <title>One night only</title>
    </country>
</cd>
</catalog>

Output.xml-これは、refer.xmlに表示される要素の値を示します

<country name="USA">
<cd>
    <title>When a man loves a woman</title>
    <price>8.70</price>
</cd>
<cd>
    <title>Greatest Hits</title>
    <price>9.90</price>
</cd>
</country>
<country name="UK">
<cd>
    <title>Still got the blues</title>
    <price>10.20</price>
</cd>
<cd>
    <title>One night only</title>
    <price>10.90</price>
</cd>
</country>

ありがとう

4

2 に答える 2

0

documentXSLTの関数を使用して、変換しているものとは異なるXMLファイルから値を検索できます。

于 2013-02-04T22:38:48.413 に答える
0

私があなたの意図を正しく理解したかどうかはわかりませんが、あなたの例では、次のことを思いつきました。アイデアは、refer.xmlを取得し、CDのタイトルを取得することです。次に、input.xmlを開き、そこで一致するタイトルを検索します。私のコードは、見つかったCDが正しい国のものであるかどうかをチェックしませんが、この変更は簡単に行えます。

XSLファイル

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <catalog>
            <xsl:for-each select="catalog/cd/country/@name">
                <country>
                    <xsl:attribute name="name">
                        <xsl:value-of select="."/>
                    </xsl:attribute>
                    <xsl:for-each select="../title">
                        <xsl:variable name="reftitle" select="."/>
                        <xsl:for-each select="document('input.xml')/catalog/cd">
                            <xsl:variable name="title" select="title"/>     
                            <xsl:variable name="price" select="price"/>


                            <xsl:if test="$reftitle=$title">
                            <cd>
                                <title>
                                    <xsl:value-of select="$reftitle"/>
                                </title>
                                <price>
                                    <xsl:value-of select="$price"/>
                                </price>
                            </cd>
                            </xsl:if>
                        </xsl:for-each>
                    </xsl:for-each>
                </country>
            </xsl:for-each>
        </catalog>
    </xsl:template>
</xsl:stylesheet>

これにより、目的の出力が作成されます。3つのネストされたループが必要かどうか、またはそれを実行するためのよりクリーンなバージョンがあるかどうかはわかりませんが、開始することができます。

于 2015-02-11T11:00:57.833 に答える