2014-09-30 40 views
0

我有一个XML文件,它看起来是这样的:蚂蚁 - XmlTask​​ - Xpath的谓词的xmlns

<?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的任何元素,并改变它们假。我几乎可以到达那里:

<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> 

(这只是将它们设置所有为false,无论内设置的)

然后,我要设置“SomeApp”为默认值= TRUE。

同样,我几乎可以到达那里,如果我没有指定本地名称():

<replace path="/Profile/applicationVisibilities[application='SomeApp']/default/text()" withText="true"/> 

那么,如何结合本地名称()与谓词拉出东西“SomeApp”?

+0

我不熟悉的蚂蚁,但因为它似乎是所有关于XML操作,我认为它必须提供一种方法与命名空间合作正常。请看看如何做到这一点。 – JLRishe 2014-09-30 12:56:29

回答

0

您可以组合local-name()标准,使用简单AND操作application='SomeApp'标准:

//*[local-name()='applicationVisibilities' and application='SomeApp']/*[local-name()='default']/text() 

UPDATE:

我错过了使用local-name()滤波器application节点。正确的XPath应该是如下(格式化的可读性):

//*[ 
    local-name()='applicationVisibilities' 
     and 
    ./*[local-name()='application and .='SomeApp'] 
    ] 
/*[local-name()='default']/text() 
+0

这不行,对不起。 – powlo 2014-09-30 12:20:52

+0

@powlo更新了我的回答 – har07 2014-09-30 12:52:59

+0

这似乎并不工作......我通过http://xpath.online-toolz.com/tools/xpath-editor.php运行它 – powlo 2014-09-30 14:15:36