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

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -