xml - Xpath with xmlns -
although there tons of question on xpath , xmlns, not able achieve desired result.
my xml :-
<project xmlns = "https://afdsl/skdflsk/d"><name>amcr_positions</name><property name="included" type="hidden">true</property><locales><locale>en</locale><locale>de</locale></locales> <defaultlocale>en</defaultlocale> <namespace><name locale="en">amcr_positions</name> <name locale="de">amcr_positions</name> <lastchanged>2015-04-06t17:37:40</lastchanged> <lastchangedby>i575079</lastchangedby> <property name="included" type="hidden">true</property> <namespace> <name locale="en">database layer</name> <querysubject status="valid"> <name locale="en">qskxyz</name> <queryitem> <name locale="en">qixyz</name> <hello>searchterm</hello> </queryitem> </querysubject> </namespace> </namespace> <namespace> <name locale="en">names</name> <lastchanged>2016-01-12t12:42:46</lastchanged> <namespace> <name locale="en">database layer</name> <querysubject status="valid"> <name locale="en">qsxyz</name> <queryitem> <name locale="en">myname</name> <hello>...hi there..</hello> </queryitem> </querysubject> </namespace> </namespace> </project>
my xpath :- //*[local-name()='namespace']/*[local-name()='querysubject']/*[local-name()='queryitem'][contains(., 'searchterm')]/*ancestor-or-self::*/name
or simplified version :- //namespace//querysubject/queryitem[contains(.,'searchterm')]/ancestor-or-self::*/name
this works xml without namespace when there namespace fails. have searched way using vbscript program don't want bind namespace rather prefer pure xpath.
the "my xpath" part shows invalid xpath expression i.e /*ancestor-or-self::*
, , forgot use local-name()
matching name
element @ end of xpath. below corrected version of xpath (wrapped lines make more readable) :
//*[local-name()='namespace'] /*[local-name()='querysubject'] /*[local-name()='queryitem'][contains(., 'searchterm')] /ancestor-or-self::* /*[local-name()='name']
quick demo : http://www.xpathtester.com/xpath/5aa4726e3bcd606dd657ca69aa4ac4ec
Comments
Post a Comment