質問

XMLデータをXMLファイルに変換するためにXSLT 2.0を使用します。 私はフォルダ内のすべてのファイル名を見つけるためにXSLを作成しました。

filenames.xml

<?xml version="1.0" encoding="UTF-8"?>
<filelist>
   <file>birds2014.xml</file>
   <file>birds2013.xml</file>
</filelist>
.

その後、XMLファイル内を検索するためにXSLを作成して、すべてのドキュメントのタグ<spbird>にある鳥のすべての名前を選択しました。

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

<xsl:template match="*">
        <xsl:apply-templates/> 
        <xsl:variable name="files" select="document('filelist.xml')/filelist/file"/>
            <xsl:element name="birdname">
                <xsl:for-each select="document($files)">    
                    <xsl:value-of select="//spbird">
                    </xsl:value-of>
                </xsl:for-each>
            </xsl:element>  
    </xsl:template>
.

結果:

<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
.

予想:

<birdname>Papagei</birdname>
<birdname>Wellensittich</birdname>
<birdname>Pfau</birdname>
.

誰もが助けになることができますか?

編集

を変更しました
 <xsl:template match="*">
.

   <xsl:template match="/">
.

これが9回(この数が出てきた)を示したのと同じ結果の問題を解決する。

今あなたの助けを借りて結果は次のとおりです。

<birdname>Papagei Wellensittich</birdname>
<birdname>Pfau</birdname>
.

Pfauは、2番目のXMLファイルの鳥です。 問題だけが、その文書()はそれぞれのためにそれぞれのためにそれぞれのことをするようです。だから私はバード名のタグで別々にリストされているすべての鳥を取得しません。

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

<xsl:template match="*">
        <xsl:apply-templates/> 
        <xsl:variable name="files" select="document('filelist.xml')/filelist/file"/>

                <xsl:for-each select="document($files)">   
                       <birdname> 
                         <xsl:value-of select="//spbird">
                       </birdname>
                    </xsl:value-of>
                </xsl:for-each>
            </xsl:element>  
    </xsl:template>
.

役に立ちましたか?

解決

xsl:for-eachの内側にあなたの要素を入れてみてください...

<xsl:for-each select="document($files)">    
    <birdname>
        <xsl:value-of select="//spbird"/>            
    </birdname>
</xsl:for-each>
.

注:要素名を動的に構築しようとしていない限り、xsl:elementを使用する理由はありません。

編集

XSLT 2.0では、xsl:value-ofspbirdのすべての値を与えます。文書上のxsl:for-eachの代わりに、spbirdでFOR-FOREを実行する必要があります。以下の例にxsl:for-eachを変更してみてください。それがうまくいかない場合は、質問に鳥のファイルの例を追加してください。

<xsl:for-each select="document($files)//spbird">    
    <birdname>
        <xsl:value-of select="."/>            
    </birdname>
</xsl:for-each>
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top