xmltask测试存在没有文本或属性的节点

时间:2015-07-02 19:06:42

标签: xml xpath ant xmltask

我使用Ant 1.8.4和xmltask 1.16。我试图修改Maven pom.xml文件以检查是否存在/ project / properties元素,如果没有,则创建一个(以便我可以添加子元素)。 xmltask documentation表示我必须使用 copy 任务进行检查,然后使用 insert 任务上的 if 属性。但是使用这段代码

<xmltask source="${pomdir}/pom.xml" dest=""${pomdir}/pom.xml">
  <copy path="/:project/:properties" property="hasProperties"/>
  <insert path="/:project/:packaging" position="after" if="hasProperties"
    xml="&lt;properties&gt;"/>
</xmltask>

当存在/ project / properties节点时生成此警告

Can only copy/cut text() nodes and attribute values to properties (found com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl)

它会插入第二个属性节点。添加&#34; / text()&#34;复制任务中xpath的末尾除去了警告,但没有修复输出中的重复属性节点。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我必须有条件地选择没有属性子节点的项目节点。

<insert path="/:project[not(:properties)]/:packaging"
    position="after">
    <![CDATA[
    <properties>
        <customProperty>blah</customProperty>
    </properties>
    ]]>
</insert>
<insert path="/:project/:properties"
    xml="&lt;customProperty&gt;blah&lt;/customProperty&gt;"/>

第一个插入包含没有属性的输入文件,第二个插入包含已经具有属性的输入文件。