簡體   English   中英

使用XSLT 1.0將元素從XML文檔傳輸到另一個文檔

[英]Transfer elements from an XML document to another using XSLT 1.0

我正在嘗試使用XSLT 1.0將元素從XML文件移動到另一個文件。 我遇到的問題是,我知道如何生成一個新的XML文件作為輸出,但是我無法確定如何在不刪除該輸出的情況下將其與一個現有文件合並,並且無法找到遇到相同問題的人。

我有以下文件:

<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="Matchs2.xsd">

    <!-- liste des matchs -->
    <listMatchs>
        <!-- matchs poule 1 -->
        <match>
            <date>2015-01-09</date>
            <groupe>1</groupe>
            <equipes>
                <domicile>11</domicile>
                <invite>12</invite>
            </equipes>
            <score victoire="invite">1-2</score>
        </match>
        <match>
            <date>2015-02-09</date>
            <groupe>1</groupe>
            <equipes>
                <domicile>11</domicile>
                <invite>13</invite>
            </equipes>
            <score victoire="domicile">3-2</score>
        </match>
    </listMatchs>
    <listEquipes>
        <equipe id="France" flag="/flag/fra.png">
            <position numGroupe="1" numEquipe="11"/>
        </equipe>
        <equipe id="Espagne" flag="/flag/esp.png">
            <position numGroupe="2" numEquipe="21"/>
        </equipe>
        <equipe id="Allemagne" flag="/flag/ger.png">
            <position numGroupe="3" numEquipe="31"/>
        </equipe>
            <equipe id="Angleterre" flag="/flag/eng.png">
                <position numGroupe="4" numEquipe="41"/>
        </equipe>
        <equipe id="Portugal" flag="/flag/por.png">
            <position numGroupe="5" numEquipe="51"/>
        </equipe>
        <equipe id="Belgique" flag="/flag/bel.png">
            <position numGroupe="6" numEquipe="61"/>
        </equipe>
        <equipe id="Italie" flag="/flag/ita.png">
            <position numGroupe="1" numEquipe="12"/>
        </equipe>
        <equipe id="Russie" flag="/flag/rus.png">
            <position numGroupe="2" numEquipe="22"/>
        </equipe>
        <equipe id="Republique tcheque" flag="/flag/cze.png">
            <position numGroupe="1" numEquipe="13"/>
        </equipe>
        <equipe id="Turquie" flag="/flag/tur.png">
            <position numGroupe="1" numEquipe="14"/>
        </equipe>
        <equipe id="Suede" flag="/flag/swe.png">
            <position numGroupe="2" numEquipe="23"/>
        </equipe>
        <equipe id="Republique Irlande" flag="/flag/irl.png">
            <position numGroupe="2" numEquipe="24"/>
        </equipe>
        <equipe id="Suisse" flag="/flag/sui.png">
            <position numGroupe="3" numEquipe="32"/>
        </equipe>
        <equipe id="Pologne" flag="/flag/pol.png">
            <position numGroupe="3" numEquipe="33"/>
        </equipe>
        <equipe id="Islande" flag="/flag/isl.png">
            <position numGroupe="3" numEquipe="34"/>
        </equipe>
        <equipe id="Autriche" flag="/flag/aut.png">
            <position numGroupe="4" numEquipe="42"/>
        </equipe>
        <equipe id="Roumanie" flag="/flag/rou.png">
            <position numGroupe="4" numEquipe="43"/>
        </equipe>
        <equipe id="Pays de Galles" flag="/flag/wal.png">
            <position numGroupe="4" numEquipe="44"/>
        </equipe>
        <equipe id="Croatie" flag="/flag/cro.png">
            <position numGroupe="5" numEquipe="52"/>
        </equipe>
        <equipe id="Ukraine" flag="/flag/ukr.png">
            <position numGroupe="6" numEquipe="62"/>
        </equipe>
        <equipe id="Slovaquie" flag="/flag/slo.png">
            <position numGroupe="5" numEquipe="53"/>
        </equipe>
        <equipe id="Hongrie" flag="/flag/hon.png">
            <position numGroupe="6" numEquipe="63"/>
        </equipe>
        <equipe id="Albanie" flag="/flag/alb.png">
            <position numGroupe="5" numEquipe="54"/>
        </equipe>
        <equipe id="Irlande du Nord" flag="/flag/nir.png">
            <position numGroupe="6" numEquipe="64"/>
        </equipe>
    </listEquipes>
</list>

和:

<resultats xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLo``cation="Matchs_recap.xsd">


    <match date="26-01-2015">
        <equipe score="5" id="41">
            <pays>Angleterre</pays>
            <poule>4</poule>
            <drapeau src="/flag/eng.png"/>
        </equipe>
        <equipe score="2" id="42">
            <pays>Autriche</pays>
            <poule>4</poule>
            <drapeau src="/flag/aut.png"/>
        </equipe>
    </match>
    <match date="26-02-2015">
        <equipe score="4" id="41">
            <pays>Angleterre</pays>
            <poule>4</poule>
            <drapeau src="/flag/eng.png"/>
        </equipe>
        <equipe score="3" id="43">
            <pays>Roumanie</pays>
            <poule>4</poule>
            <drapeau src="/flag/rou.png"/>
        </equipe>
    </match>
</resultats>

(它是法語的,對此表示抱歉)

我已經擁有XSLT來賦予第一個文件與第二個文件相同的結構,但是我正在尋找一種將其放入第二個文件的方法。 我已經嘗試了一些使用document()函數的方法,但是沒有用。 有沒有辦法做到這一點? 謝謝。

編輯:對不起,缺少的元素。 這是我的預期輸出:

    <resultats xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="Matchs_recap.xsd">


        <match date="26-01-2015">
            <equipe score="5" id="41">
                <pays>Angleterre</pays>
                <poule>4</poule>
                <drapeau src="/flag/eng.png"/>
            </equipe>
            <equipe score="2" id="42">
                <pays>Autriche</pays>
                <poule>4</poule>
                <drapeau src="/flag/aut.png"/>
            </equipe>
        </match>
        <match date="26-02-2015">
            <equipe score="4" id="41">
                <pays>Angleterre</pays>
                <poule>4</poule>
                <drapeau src="/flag/eng.png"/>
            </equipe>
            <equipe score="3" id="43">
                <pays>Roumanie</pays>
                <poule>4</poule>
                <drapeau src="/flag/rou.png"/>
            </equipe>
        </match>
        <match date="09-01-2015">
            <equipe score="1" id="11">
                <pays>France</pays>
                <poule>1</poule>
                <drapeau src="/flag/fra.png"/>
            </equipe>
            <equipe score="2" id="12">
                <pays>Italie</pays>
                <poule>1</poule>
                <drapeau src="/flag/ita.png"/>
            </equipe>
        </match>
        <match date="09-02-2015">
            <equipe score="3" id="11">
                <pays>France</pays>
                <poule>1</poule>
                <drapeau src="/flag/fra.png"/>
            </equipe>
            <equipe score="2" id="13">
                <pays>Republique tcheque</pays>
                <poule>1</poule>
                <drapeau src="/flag/cze.png"/>
            </equipe>
        </match>
</resultats>

我的XSL文件如下:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xsl"
    version="1.0">


    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">    
        <resultats xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="Matchs_recap.xsd">

            <xsl:for-each select="list/listMatchs/match">
                <match>
                    <xsl:attribute name="date">
                        <xsl:value-of select="concat(substring(date,9,2),'-',substring(date,6,2),'-',substring(date,1,4))"/>
                    </xsl:attribute>

                    <equipe>

                        <xsl:variable name="idEquipe" select="equipes/domicile"/>
                        <xsl:attribute name="score">
                            <xsl:value-of select="substring-before(score,'-')"/>
                        </xsl:attribute>
                        <xsl:attribute name="id">
                            <xsl:value-of select="$idEquipe"/>
                        </xsl:attribute>

                        <pays>
                            <xsl:value-of select="/list/listEquipes/equipe[position/@numEquipe = $idEquipe]/@id"/>
                        </pays>
                        <poule>
                            <xsl:value-of select="/list/listEquipes/equipe/position[@numEquipe = $idEquipe]/@numGroupe"/>
                        </poule>
                        <drapeau>
                            <xsl:attribute name="src">
                                <xsl:value-of select="/list/listEquipes/equipe[position/@numEquipe = $idEquipe]/@flag"/>
                            </xsl:attribute>
                        </drapeau>
                    </equipe>

                    <equipe>

                        <xsl:variable name="idEquipe" select="equipes/invite"/>
                        <xsl:attribute name="score">
                            <xsl:value-of select="substring-after(score,'-')"/>
                        </xsl:attribute>
                        <xsl:attribute name="id">
                            <xsl:value-of select="$idEquipe"/>
                        </xsl:attribute>

                        <pays>
                            <xsl:value-of select="/list/listEquipes/equipe[position/@numEquipe = $idEquipe]/@id"/>
                        </pays>
                        <poule>
                            <xsl:value-of select="/list/listEquipes/equipe/position[@numEquipe = $idEquipe]/@numGroupe"/>
                        </poule>
                        <drapeau>
                            <xsl:attribute name="src">
                                <xsl:value-of select="/list/listEquipes/equipe[position/@numEquipe = $idEquipe]/@flag"/>
                            </xsl:attribute>
                        </drapeau>
                    </equipe>
                </match>
            </xsl:for-each>

        </resultats>
    </xsl:template>

</xsl:stylesheet>

您只需要添加:

<xsl:copy-of select="document('resultats.xml')/resultats/match"/>

模板, </xsl:for-each> 用第二個XML文檔的路徑替換resultats.xml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM