XSLT を使用して、2 つの個別の web.xml ファイルの要素をマージしようとしています。たとえば、web-1.xml と web-2.xml がマージされていて、web-1.xml を処理している場合、web-2.xml のすべての要素を結果に追加する必要があります。 web-1.xml に既に存在します。
XSLT シートで、次を使用して、サーブレットを他のドキュメントにマージするドキュメントをロードしました。
<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で入手できます。 (2 番目の web-2.xml もそこにありますが、StackOverflow では 3 つのリンクを投稿できません)。