2012-10-19 7 views
0

xsl을 사용하여 중복 된 이름의 항목을 제거하면서 (값이 다를지라도) 두 xml 파일을 연결하려고합니다. 예제 파일을 참조하십시오. 도와 주셔서 정말로 고맙습니다.두 개의 XML 파일 결합 및 중복 요소 제거

File1.xml :

<?xml version="1.0" encoding="ISO-8859-1"?> 
<archive> 
    <entry> 
    <name>xxx</name> 
    <value>123</value> 
    </entry> 
    <entry> 
    <name>yyy</name> 
    <value>456</value> 
    </entry> 
    <entry> 
    <name>zzz</name> 
    <value>789</value> 
    </entry> 
</archive> 

File2.xml :

<?xml version="1.0" encoding="ISO-8859-1"?> 
<archive> 
    <entry> 
    <name>xxx</name> 
    <value>2468</value> 
    </entry> 
    <entry> 
    <name>ttt</name> 
    <value>13579</value> 
    </entry> 
</archive> 

결과 파일은 다음과 같아야합니다

<?xml version="1.0" encoding="ISO-8859-1"?> 
<archive> 
    <entry> 
    <name>xxx</name> 
    <value>123</value> 
    </entry> 
    <entry> 
    <name>yyy</name> 
    <value>456</value> 
    </entry> 
    <entry> 
    <name>zzz</name> 
    <value>789</value> 
    </entry> 
    <entry> 
    <name>ttt</name> 
    <value>13579</value> 
    </entry> 
</archive> 

답변

3

이 변환 :

을3210
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="pDoc1" select="document('file:///c:/temp/delete/file1.xml')"/> 
<xsl:param name="pDoc2" select="document('file:///c:/temp/delete/file2.xml')"/> 

<xsl:template match="/"> 
    <xsl:apply-templates select="$pDoc1/*"/> 
</xsl:template> 

<xsl:template match="/*"> 
    <archive> 
    <xsl:copy-of select="node()"/> 
    <xsl:copy-of select="$pDoc2/*/entry[not(name = current()/*/name)]"/> 
    </archive> 
</xsl:template> 
</xsl:stylesheet> 

모든 XML 문서 (사용되지 않음)에 적용될 때 (규정)이 컨텐츠 파일을 갖는

C : \ 임시 \ \의 file1.xml을 삭제

<archive> 
    <entry> 
    <name>xxx</name> 
    <value>123</value> 
    </entry> 
    <entry> 
    <name>yyy</name> 
    <value>456</value> 
    </entry> 
    <entry> 
    <name>zzz</name> 
    <value>789</value> 
    </entry> 
</archive> 

C :

: \ TEMP \
<archive> 
    <entry> 
    <name>xxx</name> 
    <value>2468</value> 
    </entry> 
    <entry> 
    <name>ttt</name> 
    <value>13579</value> 
    </entry> 
</archive> 

가 원하는, 올바른 결과을 생산

\의 file2.xml 삭제
<archive> 
    <entry> 
     <name>xxx</name> 
     <value>123</value> 
    </entry> 
    <entry> 
     <name>yyy</name> 
     <value>456</value> 
    </entry> 
    <entry> 
     <name>zzz</name> 
     <value>789</value> 
    </entry> 
    <entry> 
     <name>ttt</name> 
     <value>13579</value> 
    </entry> 
</archive> 
+0

고맙습니다. 그것은 올바르게 작동합니다! – user1760340