2014-09-30 58 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