2013-05-03 42 views
0

更新與來自另一個可選的信息一個XML文件信息,使用XSLT與來自另一個可選的信息一個XML文件更新信息,使用XSLT

如果我改變usa11.xml爲:

<?xml version="1.0" encoding="UTF-8"?> 
<country> 
    <state name="CA"> 
    <city> 
     <street> 
     El Comino Ave. 
     </street> 
    <library> 
     library 11111. 
     </library> 
</city> 
<city> 
    <street> 
    DeAnza Ave. 
    </street> 
    <library> 
      library 22222. 
     </library> 
</city> 
<city> 
    <street> 
    shoreline Ave. 
    </street> 
    <library> 
     library 33333. 
     </library> 
</city> 

和usaa22.xml爲:

<?xml version="1.0" encoding="UTF-8"?> 
<country> 
<state name="CA"> 
<city> 
     <street> 
      El Comino Ave. 
     </street> 
    <library> 
      library AAAAA. 
     </library> 
    </city> 
<city> 
     <street> 
      DeAnza Ave. 
     </street> 
    <library> 
      library BBBBB. 
     </library> 
     </city> 

然後使用usa22.xml的元素vaules更換usa11.xml的那些僅當它們的街道名稱相同: 然後得到輸出usa33.xml喜歡:

<?xml version="1.0" encoding="UTF-8"?> 
<country> 
    <state name="CA"> 
    <city> 
     <street> 
     El Comino Ave. 
     </street> 
    <library> 
      library AAAAA. 
     </library> 
    </city> 
    <city> 
     <street> 
      DeAnza Ave. 
     </street> 
    <library> 
      library BBBBB. 
     </library> 
    </city> 
    <city> 
     <street> 
      shoreline Ave. 
     </street> 
    <library> 
      library 33333. 
     </library> 
    </city> 
</state> 

請幫助advcie任何想法如何做到這一點? 這裏 「街道」價值「埃爾科米諾大道」

將用作關鍵字或ID來查找usa22.xml中的實際匹配,然後使用值爲「庫11111」的元素 「庫」的值。

低於與「El Comino Ave.」相匹配的街道價值的街道元素。將被相同的街道價值「El Comino Ave.」所取代。但是diff庫的值是「library AAAAA」。在usa22.xml中成爲「庫BBBBB」。

請幫助advcie任何想法如何使用xslt做到這一點???

感謝

回答

0

嘗試這樣:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:variable name="u2" select="document('usaa22.xml')"/> 
    <xsl:template match="city"> 
     <xsl:choose> 
      <xsl:when test="$u2//city[street=current()/street]"> 
       <xsl:copy> 
        <xsl:apply-templates select="$u2//city[street=current()/street]/* " /> 
       </xsl:copy> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:copy> 
        <xsl:apply-templates select="@* | node() " /> 
       </xsl:copy> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 

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

這將產生以下輸出:

<country> 
    <state name="CA"> 
     <city> 
      <street> 
       El Comino Ave. 
      </street> 
      <library> 
       library AAAAA. 
      </library> 
     </city> 
     <city> 
      <street> 
       DeAnza Ave. 
      </street> 
      <library> 
       library BBBBB. 
      </library> 
     </city> 
     <city> 
      <street> 
       shoreline Ave. 
      </street> 
      <library> 
       library 33333. 
      </library> 
     </city> 
    </state> 
</country> 
+0

@dateboyTom:很高興我能幫忙。你能否將我的答案標記爲有效?謝謝 – 2013-05-03 20:28:58

相關問題