我有一个看起来像这样的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Profile xmlns="http://soap.sforce.com/2006/04/metadata">
<applicationVisibilities>
<application>SomeApp</application>
<default>true</default>
<visible>true</visible>
</applicationVisibilities>
<applicationVisibilities>
<application>AnotherApp</application>
<default>false</default>
<visible>true</visible>
</applicationVisibilities>
<applicationVisibilities>
<application>YetAnotherApp</application>
<default>false</default>
<visible>true</visible>
</applicationVisibilities>
...
</Profile>
在ant任务中,我想挑选任何默认设置为true的元素,并将它们更改为false。我几乎可以到达那里:
<target name="resetApps">
<xmltask todir="stage/deploy/profiles/">
<fileset id="fileset" dir="stage/profiles/">
<include name="**/*.profile"/>
</fileset>
<replace path="//*[local-name()='applicationVisibilities']/*[local-name()='default']/text()" withText="false"/>
</xmltask>
</target>
(只是将 all 设置为false,无论其中的设置如何)
然后我想设置&#34; SomeApp&#34;默认= true。
如果我不必指定local-name(),我几乎可以到达那里:
<replace path="/Profile/applicationVisibilities[application='SomeApp']/default/text()" withText="true"/>
那么我如何将local-name()内容与谓词结合起来以取出&#34; SomeApp&#34;?
答案 0 :(得分:0)
您可以使用简单local-name()
运算符将application='SomeApp'
条件与AND
条件结合使用:
//*[local-name()='applicationVisibilities' and application='SomeApp']/*[local-name()='default']/text()
更新:
我错过了对local-name()
节点使用application
过滤器。正确的XPath应如下(格式化为可读性):
//*[
local-name()='applicationVisibilities'
and
./*[local-name()='application and .='SomeApp']
]
/*[local-name()='default']/text()