与来自另一个可选的信息一个XML文件更新信息,使用XSLT

与来自另一个可选的信息一个XML文件更新信息,使用XSLT

问题描述:

更新与来自另一个可选的信息一个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做到这一点???

感谢

尝试这样:

<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