Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ant xmltask将标记从源文件复制到特定位置的dest文件,从而扩展XML文件_Ant_Xpath_Web.xml_Xmltask - Fatal编程技术网

如何使用ant xmltask将标记从源文件复制到特定位置的dest文件,从而扩展XML文件

如何使用ant xmltask将标记从源文件复制到特定位置的dest文件,从而扩展XML文件,ant,xpath,web.xml,xmltask,Ant,Xpath,Web.xml,Xmltask,我试图为本地开发创建一个特殊的web.xml 我有一些标记存储在一个单独的xml文件中,需要选择这些标记并粘贴到最终web.xml中的特定位置 为了实现这一点,我以以下方式使用复制和粘贴操作: <xmltask source="templates.xml"> <copy path="//data/init-param" buffer="initParamBuffer"/> </xmltask> <xmltask source="web.xml" d

我试图为本地开发创建一个特殊的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中插入/写入标记。我已经成功地使用一个不太复杂的表达式,在sligtly off的位置插入了单个init param标记:

<paste path="//web-app/filter[1]/init-param"
             position="after" buffer="initParamBuffer"/>

所以我的问题是: 答:我想在缓冲区中选择多个标记 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>

新参数1
1.
新参数2
2.
下面是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>

某些过滤器
/某某/*
我的过滤器
/我的路径/*
某些过滤器
foo.bar.SomeFilter
SomeInitParameter
4711
我的过滤器
foo.bar.MyFilter
myinit参数
0815
以下是我希望实现的结果:

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

某些过滤器
/某某/*
我的过滤器
/我的路径/*
某些过滤器
foo.bar.SomeFilter
SomeInitParameter
4711
我的过滤器
foo.bar.MyFilter
myinit参数
0815
新参数1
1.
新参数2
2.

XPath是一种在XML文档的XML信息集上运行的查询语言。它只能返回结果或选择节点,但不能更改源XML文档的结构或以任何方式修改它

XSLT是专门为处理XML文档和生成新的XML文档而设计的一种合适的语言

问题中指定的任务可以使用XSLT以非常简单的方式完成

请提供完整(但最少)的源XML文档、完整的所需结果,并指定转换应遵循的任何规则。然后,许多人将能够为您提供正确和有用的解决方案。

使用XPath或:

路径|路径

发件人:


致:


你是对的,但我首先选择了不同的解决方案,因为与一个或两个额外的ant指令相比,构建过程中额外的样式表会产生过热。如果我的问题不能用AntXMLTask解决,我肯定会采用xslt方法。
<paste path="//web-app/filter[1]/init-param" position="after" buffer="initParamBuffer"/>
<paste path="//web-app/filter[1]/init-param|//web-app/filter[2]/init-param" position="after" buffer="initParamBuffer"/>