使用XSLT
在一个XML文件中使用另一个XML文件中的可选信息更新信息如果我将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 as:
<?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>
请帮忙建议如何做到这一点??? 这里 “街道”,价值“El Comino Ave。”
将用作键或ID来查找usa22.xml中的实际匹配,然后是element的值 “library”,其值为“library 11111”。
在街道元素下方,街道值为“El Comino Ave”。将被替换为相同的街道价值“El Comino Ave.”但是“库AAAAA”的差异库值。在usa22.xml中成为“库BBBBB”。
请帮助提出任何想法如何使用xslt来做这个???
谢谢
答案 0 :(得分: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>