2013-03-02 3 views
1

하나의 XML로 병합해야하는 두 개의 XML 파일이 있습니다. 다음은 예입니다두 개의 XML 파일을 병합하는 방법

orginal.xml 파일 :

<employees> 
    <employee id="1"> 
    <name> Name1 </name> 
    <email> email1 <email> 
    </employee> 
    <employee id="2"> 
    <name> Name2 </name> 
    <email> email2 <email> 
    </employee> 
</employees> 

하여 update.xml 파일 :

<employees> 
     <employee id="2"> 
      <name> Name2 </name> 
      <email> email_New <email> 
     </employee> 
     <employee id="3"> 
      <name> Name3 </name> 
      <email> email3 <email> 
     </employee> 
</employees> 

들은이 같은 XML 파일에 병합해야합니다

<employees> 
    <employee id="1"> 
    <name> Name1 </name> 
    <email> email1 <email> 
    </employee> 
    <employee id="2"> 
    <name> Name2 </name> 
    <email> email_New <email> 
    </employee> 
    <employee id="3"> 
    <name> Name3 </name> 
    <email> email3 <email> 
    </employee> 
</employees> 

사실, update.xml을 사용하여 orginal.xml을 업데이트하고 싶습니다.

하여 update.xml에서 5,
  1. 새로운 종업원은 해당 직원 노드에 덮어 쓰기한다 update.xml을

  2. 변성 종업원 정보 original.xml 첨가한다.

나는 XSLT의 약간을 알고 있지만, 내 지식은 병합에 대한 올바른 XSLT를 파악하는 것만으로는 충분하지 않습니다.

답변

2

이 시도주십시오 : 입력으로 같은 폴더에 update.xml을 선물로 첫 번째 XML을 실행하면

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:param name="fileName" select="'update.xml'" /> 
    <xsl:param name="updates" select="document($fileName)" /> 

    <xsl:variable name="updateEmployees" select="$updates/employees/employee" /> 

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

    <xsl:template match="employees"> 
    <xsl:copy> 
     <xsl:apply-templates select="employee[not(@id = $updateEmployees/@id)]" /> 
     <xsl:apply-templates select="$updateEmployees" /> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

을,이 생산 :

<employees> 
    <employee id="1"> 
    <name> Name1 </name> 
    <email> 
     email1 </email> 
    </employee> 
    <employee id="2"> 
    <name> Name2 </name> 
    <email> 
     email_New 
    </email> 
    </employee> 
    <employee id="3"> 
    <name> Name3 </name> 
    <email> 
     email3 
    </email> 
    </employee> 
</employees> 

fileNameupdates이 매개 변수로 선언되므로 업데이트가 "update.xml"이외의 파일에 있거나 직접 업데이트 XML을 전달하려는 경우 XSLT를 수정하지 않고도 업데이트를 수행 할 수 있습니다.

+0

감사합니다. Rishe, 시험해 보겠습니다. – skyfree

관련 문제