1

努力解决这个问题;我有一个(Tomcat6 'Context.xml')默认文档,本质上是这样的:

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

我想添加“资源”和“环境”作为最外层 Context 节点的子节点;所以我最终得到:

<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 回答