与来自另一个可选的信息一个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>
@dateboyTom:很高兴我能帮忙。你能否将我的答案标记为有效?谢谢 – 2013-05-03 20:28:58