Ant ReplaceRegExp Questions



我对Ant中的ReplaceRegExp函数不熟悉,有一些问题。

这是我的用例。

我有多个.xml文件,我需要以特定的方式操作它们。

下面是一个。xml内容的例子:

<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>29.0</apiVersion>
    <packageVersions>
        <majorNumber>1</majorNumber>
        <minorNumber>1228</minorNumber>
        <namespace>prefix1__FirstNamespace</namespace>
    </packageVersions>
    <packageVersions>
        <majorNumber>2</majorNumber>
        <minorNumber>4</minorNumber>
        <namespace>prefix2__TheNextNamespace</namespace>
    </packageVersions>
    <packageVersions>
        <majorNumber>7</majorNumber>
        <minorNumber>542</minorNumber>
        <namespace>prefix3__AnotherNamespace</namespace>
    </packageVersions>
    <status>Active</status>
</ApexClass>

如何更新&只有属性中包含前缀"prefix3"的属性?

我已经尝试了这个函数,希望将属性更改为${correctMinorNumber}指定的值:

<target name="setminorNumber">
    <replaceregexp  flags="gis" 
                    match="&lt;minorNumber&gt;?(.*)&lt;/minorNumber&gt;?(.+?)&lt;namespace&gt;prefix3__&lt;/namespace&gt;"
                    byline="false"
        >
        <substitution expression="&lt;minorNumber&gt;${correctMinorNumber}&lt;/minorNumber&gt;&#10;&#9;&#9;&lt;namespace&gt;prefix3__&lt;/namespace&gt;"/>
        <fileset dir="${sf.retrieveFolder}">
            <include name="**/*.xml"/>
        </fileset>
    </replaceregexp>
</target>

它在只有一个<packageVersion>节点(名称空间中有prefix3__)的文件上工作正确,但是在包含多个<packageVersion>节点的文件上,它用一个prefix3__节点替换所有节点。我猜问题在于我使用通配符,但我对replaceregexp的了解不够,无法确定正确的解决方案。

有什么想法,我可以做什么来实现我需要做的吗?

感谢您的帮助。

用正则表达式解析XML充满了问题,最好避免。

可以考虑使用XMLTask。这是一个专门用于解析和修改XML的Ant任务。

下载xmltask.jar放到Ant lib目录下。

下面是Ant脚本的一部分。它标识<minorNumber>元素,这些元素是<namespace>元素的兄弟元素,其中<namespace>元素具有以字符串prefix3__开头的文本节点。然后它替换<minorNumber>元素下的文本节点:

<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" />
<xmltask dest="${dest.xml-file}">
    <fileset file="src.xml"/>
    <replace 
        path="//:packageVersions[starts-with(:namespace/text(), 'prefix3__')]/:minorNumber/text()" 
        withText="${correctMinorNumber}"
    />
</xmltask>

此脚本假设XML位于名为src.xml的文件中,并且名为dest.xml-file的属性指向XML的修改位置。

相关内容

  • 没有找到相关文章

最新更新