具有标签列表时更新 xml 文件的 Ant 任务
Ant task to update xml file when having list of tags
我有一个包含一组上下文参数的 XML 文件。
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.1">
<context-param>
<param-name>deployment.type</param-name>
<param-value>main</param-value>
</context-param>
<context-param>
<param-name>csrf.protection.active</param-name>
<param-value>false</param-value>
</context-param>
</web-app>
我想更新参数值
csrf.protection.active
我找到了这个蚂蚁目标。
<target name="update-csrf-value">
<xmltask source="${dist.dir}/docker/WEB-INF/web.xml" dest="${dist.dir}/docker/WEB-INF/web.xml" report="true">
<replace path="/:web-app/:context-param/:param-value/text()" withText="new text"/>
</xmltask>
</target>
但是有了这个,我所有的参数值都改变了。如何更改特定键的值?
找到解决方法。我用正则表达式找到它替换了整个标签。
<target name="update-csrf-value">
<replaceregexp file="${dist.dir}/docker/WEB-INF/web.xml"
match="<param-name>csrf.protection.active</param-name>${line.separator}(\s*)<param-value>([a-z]+)</param-value>"
replace="<param-name>csrf.protection.active</param-name>${line.separator}<param-value>false</param-value>"/>
</target>
尝试使用正则表达式 parse/edit XML 通常不是一个好主意。您所要做的就是修复您的 XPath。以下代码将仅修改 param-value
节点,这些节点具有包含文本 "deployment.type":
的同级 param-name
节点
<xmltask source="web.xml" dest="web2.xml" report="true">
<replace path="/:web-app/:context-param/:param-name[text() = 'deployment.type']/../:param-value/text()" withText="new text"/>
</xmltask>
我有一个包含一组上下文参数的 XML 文件。
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.1">
<context-param>
<param-name>deployment.type</param-name>
<param-value>main</param-value>
</context-param>
<context-param>
<param-name>csrf.protection.active</param-name>
<param-value>false</param-value>
</context-param>
</web-app>
我想更新参数值 csrf.protection.active
我找到了这个蚂蚁目标。
<target name="update-csrf-value">
<xmltask source="${dist.dir}/docker/WEB-INF/web.xml" dest="${dist.dir}/docker/WEB-INF/web.xml" report="true">
<replace path="/:web-app/:context-param/:param-value/text()" withText="new text"/>
</xmltask>
</target>
但是有了这个,我所有的参数值都改变了。如何更改特定键的值?
找到解决方法。我用正则表达式找到它替换了整个标签。
<target name="update-csrf-value">
<replaceregexp file="${dist.dir}/docker/WEB-INF/web.xml"
match="<param-name>csrf.protection.active</param-name>${line.separator}(\s*)<param-value>([a-z]+)</param-value>"
replace="<param-name>csrf.protection.active</param-name>${line.separator}<param-value>false</param-value>"/>
</target>
尝试使用正则表达式 parse/edit XML 通常不是一个好主意。您所要做的就是修复您的 XPath。以下代码将仅修改 param-value
节点,这些节点具有包含文本 "deployment.type":
param-name
节点
<xmltask source="web.xml" dest="web2.xml" report="true">
<replace path="/:web-app/:context-param/:param-name[text() = 'deployment.type']/../:param-value/text()" withText="new text"/>
</xmltask>