1

2 つの XML ファイルを XSLT でマージする必要があります。それらは次のようになります。

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
    xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
    ... Some stuff
</s:Schema>
<rs:data>
  <z:row Initialer='HBL' personaleGrupper='FF' Fornavn='Harald' Efternavn='Blåtand'     personnummer='123459'/>
</rs:data>
</xml>

そして、次のような別のファイル:

<rs:data>
  <z:row Initialer='KT' personaleGrupper='FF' Fornavn='Kristian' Efternavn='Tyrann' personnummer='546578'/>
</rs:data>

私の試みは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:rs="urn:schemas-microsoft-com:rowset"
            xmlns:z="#RowsetSchema">

<xsl:template match="rs:data">
<xsl:copy>
    <xsl:apply-templates select="@* | node() | document('doc2.xml')/rs:data/z:row/node()" />
</xsl:copy>
</xsl:template>

<xsl:template match="node() | @*">
    <xsl:copy-of select="." />
</xsl:template>

</xsl:stylesheet>

ただし、ソース ファイル (doc1.xml) のコピーはほぼ取得できます。つまり、スキーマ部分があり、Harald Blåtand の rs:data 行が 1 行あります。しかし、クリスチャン・ティランの系統ではありません。

私は何を間違っていますか?

4

1 に答える 1

3

あなたの出力がどのように見えるべきか完全にはわかりません。

次の xslt は、最初のドキュメントの rs:data エントリの背後にある doc2.xml から rs:data エントリをコピーします。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:rs="urn:schemas-microsoft-com:rowset"
            xmlns:z="#RowsetSchema">

    <xsl:template match="xml">
        <xsl:copy>
            <xsl:apply-templates select="@* | node() " />
            <xsl:apply-templates select="rs:data"  mode="copy" />
            <xsl:apply-templates select="document('doc2.xml')//rs:data" mode="copy" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="rs:data" />

    <xsl:template match="*" mode ="copy">
        <xsl:copy>
            <xsl:apply-templates select="@* | node() " />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="@* | node() " />
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

次の出力が生成されます。

?xml version="1.0"?>
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    <s:Schema id="RowsetSchema">
        ... Some stuff
    </s:Schema>

    <rs:data>
        <z:row Initialer="HBL" personaleGrupper="FF" Fornavn="Harald" Efternavn="Bl&#xE5;tand" personnummer="123459"/>
    </rs:data>
    <rs:data>
        <z:row Initialer="KT" personaleGrupper="FF" Fornavn="Kristian" Efternavn="Tyrann" personnummer="546578"/>
    </rs:data>
</xml>

更新: 出力には rs:data が 1 つだけ存在し、z:row のみをマージする必要があるようです。これを試して:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:rs="urn:schemas-microsoft-com:rowset"
            xmlns:z="#RowsetSchema">

    <xsl:template match="xml">
        <xsl:copy>
            <xsl:apply-templates select="@* | node() " />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="rs:data" >
        <xsl:copy>
            <xsl:apply-templates select="@* | node() " />
            <xsl:apply-templates select="document('doc2.xml')//rs:data/*" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="@* | node() " />
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

生成するもの:

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    <s:Schema id="RowsetSchema">
        ... Some stuff
    </s:Schema>
    <rs:data>
        <z:row Initialer="HBL" personaleGrupper="FF" Fornavn="Harald" Efternavn="Bl&#xE5;tand" personnummer="123459"/>
        <z:row Initialer="KT" personaleGrupper="FF" Fornavn="Kristian" Efternavn="Tyrann" personnummer="546578"/>
    </rs:data>
</xml>
于 2013-04-24T15:43:50.493 に答える