要使上一个答案中的样式表起作用,请将命名空间声明添加到样式表(带有前缀),并对所有节点名称使用新的命名空间前缀。
因此这应该这样做:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:y="http://www.yahoo.com/xmlns/ApplicationTest"
>
<xsl:variable name="u2" select="document('usaa22.xml')"/>
<xsl:template match="y:city">
<xsl:choose>
<xsl:when test="$u2//y:city[y:street=current()/y:street]">
<xsl:copy>
<xsl:apply-templates select="$u2//y:city[y:street=current()/y: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>
注意:您的 xml 更改似乎不正确:
<?xml version="1.0" xmlns="http://www.yahoo.com/xmlns/ApplicationTest" encoding="UTF-8"?>
<?xml
序言不允许命名空间。
命名空间应添加到 xml 文件中的第一个元素:
<country xmlns="http://www.yahoo.com/xmlns/ApplicationTest">