2013-04-24 2 views
1

두 개의 XML 파일을 XSLT와 병합해야합니다. 그들은 다음과 같이 :두 개의 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 행이 있습니다. 그러나 크리스티안 티란 라인은 아닙니다.

내가 뭘 잘못하고 있니?

답변

3

출력 결과가 어떻게 될지 잘 모르겠습니다.

다음 xslt는 docs.xml의 rs : data 항목을 첫 번째 문서의 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> 

업데이트 : 출력 데이터 만 Z 병합 : 행 거기 하나만 RS되어야 같다 . 이 시도 :

<?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> 
+0

의미가 있습니다! 무리 감사! – SamiHuutoniemi

관련 문제