1

これを解決するのに苦労しています。私は(Tomcat6 'Context.xml')デフォルトのドキュメントを持っています。これは本質的にこれです:

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

そして、最も外側の Context ノードの子として「Resource」と「Environmment」を追加したいと考えています。だから私は次のようになります:

<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Resource name="abc"[...]/>
    <Environment name="xyz"[...]/>
</Context>

XSLT 1.0 を使用します。

(ノード 'WatchedResource' がドキュメントに存在するという仮定も避けたいと思います。)

4

2 に答える 2

2
<xsl:param name="new">
  <Resource name="abc..."/>
  <Environment name="xyz..."/>
</xsl:param>

<xsl:template match="Context">
  <xsl:copy>
    <xsl:copy-of select="@* | node()"/>
    <xsl:copy-of select="$new"/>
  </xsl:copy>
</xsl:template>

十分なはずです。

于 2012-12-04T15:18:37.313 に答える
1

この変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="/*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
    <Resource name="abc"/>
    <Environment name="xyz"/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<Context>
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

必要な正しい結果が生成されます。

<Context>
   <WatchedResource>WEB-INF/web.xml</WatchedResource>
   <Resource name="abc"/>
   <Environment name="xyz"/>
</Context>

: 既存の要素名の名前、および最上位要素の子がドキュメントに存在するかどうか、またはその数には依存しません。

于 2012-12-04T15:29:41.157 に答える