|
top
|
 Subject: Selecting element based on attributes Author: Mike Craig Date: 09 May 2011 05:31 PM
|
I am trying to automate the removal of entries in our CruiseControl configuration file. To do so, I need to select an element based on the values of a few attributes. Then, using Nant, do an xmlpoke to that XPath, with a blank value. In essence I'm trying to devine an elements xpath, and then write an empty string to that path to erase the element.
Not sure if this can really be done, but I'm giving it one heck of a try:
xml fragment:
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<cb:scope UnitTestsCanFailBuild="false">
<cb:scope depot="YourServices" project.name="ProjectB" buildType="CI" qPriority="1" ProjectVersion="Continuous." UnitTestsCanFailBuild="true">
<cb:BrokerageServicesDefaultProject />
</cb:scope>
<cb:scope depot="MyServices" project.name="ProjectA" buildType="QADrop" qPriority="2" ProjectVersion="1.0" UnitTestsCanFailBuild="true">
<cb:BrokerageServicesDefaultProject />
</cb:scope>
</cb:scope>
I can seemingly select the element using the following xpath:
//*[local-name()='scope' and namespace-uri()='urn:ccnet.config.builder']/*[local-name()='scope' and namespace-uri()='urn:ccnet.config.builder'][@depot='MyServices'][@project.name='ProjectA'][@buildType='CI']
However, if I output the results of that xpath to a file, I only get
<cb:BrokerageServicesDefaultProject />
What I really need is the parent of this element, the element that contains these attributes.
If I try to append a .. to the xpath, then I grab the node an additional level up, and end up wiping out too much data.
Any ideas?
Thanks
|
|
|