繁体   English   中英

在Ant脚本中查找资源参考XML标签

[英]Finding a resource-ref XML Tag In Ant Script

我想使用ant脚本以编程方式删除XML块。 我找到了很棒的xmltask任务,但是对于我一生来说,我找不到想要删除的resource-ref节点。

这是我的XML文档的一部分。 来自使用标准DTD的web.xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="WebApp_ID"
     version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name>Foo</display-name>

  <resource-ref>
    <description>Something Clever</description>
    <res-ref-name>jdbc/foo1</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

  <resource-ref>
    <description>Reports Database</description>
    <res-ref-name>jdbc/foo2</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

</web-app>

我试图像这样删除第二个resource-ref块:

<project name="test" basedir="." default="fixxml">
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
  <target name="fixxml" description="er doy">
    <xmltask source="web.xml" dest="output.xml">
      <remove path="/web-app/resource-ref/description[text()='Reports Database']" />
    </xmltask>
  </target>
</project>

但是,它不起作用。 我还尝试了以下remove语句:

<remove path="/web-app/resource-ref[2]" />
....
<remove path="//description[text()[normalize-space(.)='Reports Database']]"" />    

他们都没有工作。 有人看到我的查询可能做错了吗?

主要问题可能是您的web.xml声明了名称空间,但是您的xpath忽略了它。 请参阅: https//stackoverflow.com/a/35778167/366749

另一个问题可能是您的xpath表达式将'description'元素指定为要删除的节点,而不是其父节点。

建议的编辑(未试用):

<remove path="path="/*[local-name()='web-app']/*[local-name()='resource-ref'][2]"/>

Patrice的答案似乎最能说明问题。 Xpath似乎忽略了我的命名空间。 因此,我尝试使用这种知识和各种用Java编写的xpath帮助器来摆弄“查询字符串”。 经过一段时间后,我终于放弃了这条路。

我通过执行以下操作解决了此问题:

  1. 编写一个删除XML块的shell脚本。
  2. 从我的Ant文件中调用该脚本。

请注意,对我来说,这不是选项A或B,它更像选项M。但是我实在负担不起Xpath的所有缺点以及如何在流行的Java库中实现它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM