我正在尝试使用 XSLT 合并来自两个单独的 web.xml 文件的元素。例如,如果 web-1.xml 和 web-2.xml 正在合并,并且我正在处理 web-1.xml,我希望将 web-2.xml 中的所有元素添加到结果中,除了那些已经存在于 web-1.xml 中。
在 XSLT 工作表中,我使用以下方法加载了要将其 servlet 合并到另一个文档中的文档:
<xsl:variable name="jandy" select="document('web-2.xml')"/>
然后我有以下规则:
<xsl:template match="webapp:web-app">
<xsl:copy>
<!-- Copy all of the existing content from the document being processed -->
<xsl:apply-templates/>
<!-- Merge any <servlet> elements that don't already exist into the result -->
<xsl:for-each select="$jandy/webapp:web-app/webapp:servlet">
<xsl:variable name="servlet-name"><xsl:value-of select="webapp:servlet-name"/></xsl:variable>
<xsl:if test="not(/webapp:web-app/webapp:servlet/webapp:servlet-name[text() = $servlet-name])">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:copy>
</xsl:template>
我遇到的问题是在正确的情况下进行测试。使用上面的代码,无论是否存在具有给定节点的 servlet-name 元素,测试总是评估为 false。我尝试了各种不同的测试,但没有运气。
相关文件位于http://www.cs.hope.edu/~mcfall/stackoverflow/web-1.xml和http://www.cs.hope.edu/~mcfall/stackoverflow/transform.xslt(第二个 web-2.xml 也在那里,但 StackOverflow 不允许我发布三个链接)。