【问题标题】:xmltask test existence of node without text or attributexmltask 测试是否存在没有文本或属性的节点
【发布时间】:2015-07-03 05:59:17
【问题描述】:

我正在使用 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)

它会插入第二个属性节点。在复制任务中将“/text()”添加到 xpath 的末尾会消除警告,但不会修复输出中的重复属性节点。

【问题讨论】:

    标签: xml xpath ant xmltask


    【解决方案1】:

    我找到了解决方案。我必须有条件地选择没有 properties 子节点的 project 节点。

    <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;"/>
    

    第一个插入覆盖没有属性的输入文件,第二个插入覆盖已经有属性的输入文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多