xmltask 测试没有文本或属性的节点是否存在
xmltask test existence of node without text or attribute
我正在使用 Ant 1.8.4 和 xmltask 1.16。我正在尝试修改 Maven pom.xml 文件以检查是否有 /project/properties 元素,如果没有则创建一个(这样我就可以添加子元素)。 xmltask documentation 表明我必须使用 copy 任务来检查,然后在 [=19= 上使用 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="<properties>"/>
</xmltask>
存在现有 /project/properties 节点时产生此警告
Can only copy/cut text() nodes and attribute values to properties (found com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl)
并插入第二个属性节点。在复制任务中将“/text()”添加到 xpath 的末尾可以消除警告,但不会修复输出中重复的属性节点。
我找到了解决方案。我必须有条件地 select 没有 properties 子节点的 project 节点。
<insert path="/:project[not(:properties)]/:packaging"
position="after">
<![CDATA[
<properties>
<customProperty>blah</customProperty>
</properties>
]]>
</insert>
<insert path="/:project/:properties"
xml="<customProperty>blah</customProperty>"/>
第一次插入涵盖没有属性的输入文件,第二次插入涵盖已有属性的输入文件。
我正在使用 Ant 1.8.4 和 xmltask 1.16。我正在尝试修改 Maven pom.xml 文件以检查是否有 /project/properties 元素,如果没有则创建一个(这样我就可以添加子元素)。 xmltask documentation 表明我必须使用 copy 任务来检查,然后在 [=19= 上使用 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="<properties>"/>
</xmltask>
存在现有 /project/properties 节点时产生此警告
Can only copy/cut text() nodes and attribute values to properties (found com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl)
并插入第二个属性节点。在复制任务中将“/text()”添加到 xpath 的末尾可以消除警告,但不会修复输出中重复的属性节点。
我找到了解决方案。我必须有条件地 select 没有 properties 子节点的 project 节点。
<insert path="/:project[not(:properties)]/:packaging"
position="after">
<![CDATA[
<properties>
<customProperty>blah</customProperty>
</properties>
]]>
</insert>
<insert path="/:project/:properties"
xml="<customProperty>blah</customProperty>"/>
第一次插入涵盖没有属性的输入文件,第二次插入涵盖已有属性的输入文件。