我正在尝试为本地开发创建一个特殊的 web.xml。
我有一些标签存储在一个单独的 xml 文件中,需要选择这些标签并将其粘贴到最终 web.xml 中的特定位置。
为此,我以下列方式使用复制和粘贴操作:
<xmltask source="templates.xml">
<copy path="//data/init-param" buffer="initParamBuffer"/>
</xmltask>
<xmltask source="web.xml" dest="web.xml">
<paste path="//web-app/filter[contains(./filter-name,'MyFilter')]
/init-param[contains(./param-name,
'MyInitParameter')]"
position="after" buffer="initParamBuffer"/>
</xmltask>
我的目的是从源文件中收集所有 init-param 标签,并将它们粘贴在粘贴操作中选择的标签之后。
此外,我使用 contains() 函数选择包含具有指定内容的标签的标签的部分也无法顺利运行。
也许有更好的方法来形成这个 xpath 表达式......
更新:
正如我之前所写,我不知道解决这个问题的最佳方法。我已经阅读了关于使用样式表进行转换的可能性,但是由于 ant-xmltask 承诺是一个更巧妙的解决方案,所以我首先尝试了这个。
就我采用这种方法而言,可以使用这种方法将标签插入/写入 web.xml。我已经成功地在稍微关闭的位置插入了单个 init-param 标记,表达式不太复杂:
<paste path="//web-app/filter[1]/init-param"
position="after" buffer="initParamBuffer"/>
所以我的问题是: A:我想在缓冲区中选择多个标签 B:我想在由名称(而不是索引)指定的标签之后插入该缓冲区的内容。
这是要插入到 web.xml 中的源 (templates.xml) 的示例:
<data>
<init-param>
<param-name>newparam1</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>newparam2</param-name>
<param-value>2</param-value>
</init-param>
</data>
这是 web.xml 的一部分,上面的部分将被粘贴:
<web-app>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>/somePath/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/myPath/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>foo.bar.SomeFilter</filter-class>
<init-param>
<param-name>SomeInitParameter</param-name>
<param-value>4711</param-value>
</init-param>
</filter>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>foo.bar.MyFilter</filter-class>
<init-param>
<param-name>MyInitParameter</param-name>
<param-value>0815</param-value>
</init-param>
</filter>
</web-app>
这是我希望达到的结果:
<web-app>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>/somePath/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/myPath/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>foo.bar.SomeFilter</filter-class>
<init-param>
<param-name>SomeInitParameter</param-name>
<param-value>4711</param-value>
</init-param>
</filter>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>foo.bar.MyFilter</filter-class>
<init-param>
<param-name>MyInitParameter</param-name>
<param-value>0815</param-value>
</init-param>
<init-param>
<param-name>newparam1</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>newparam2</param-name>
<param-value>2</param-value>
</init-param>
</filter>
</web-app>