Ottenere attributi usando XPath

Data una struttura XML come questa:

   Harry Potter 29.99   Learning XML 39.95   

Come potrei ottenere il valore di lang (dove lang è eng nel titolo del libro), per il primo elemento?

Come posso ottenere il valore di lang (dove lang = eng nel titolo del libro), per il primo elemento?

Usa :

 /*/book[1]/title/@lang 

Questo significa :

Seleziona l’attributo lang dell’elemento title che è figlio del primo figlio del book dell’elemento superiore del documento XML.

Per ottenere solo il valore di stringa di questo attributo utilizzare la funzione standard XPath string() :

 string(/*/book[1]/title/@lang) 

Grazie! Questo ha risolto un problema simile che avevo con un attributo di dati all’interno di un Div.

 
data I do not want

Usa questo xpath: //*[@id="prop_sample"]/@data-want

Spero che questo aiuti qualcun altro!

Puoi provare sotto il pattern xPath,

  XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']") 

Puoi anche farcela

 string(//bookstore/book[1]/title/@lang) string(//bookstore/book[2]/title/@lang) 

anche se stai usando XMLDOM con JavaScript puoi codificare qualcosa del genere

 var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang"); 

e n1.text ti darà il valore "eng"

Ecco il frammento di ottenere il valore dell’attributo di “lang” con XPath e VTD-XML.

 import com.ximpleware.*; public class getAttrVal { public static void main(String s[]) throws VTDException{ VTDGen vg = new VTDGen(); if (!vg.parseFile("input.xml", false)){ return ; } VTDNav vn = vg.getNav(); AutoPilot ap = new AutoPilot(vn); ap.selectXPath("/bookstore/book/title/@lang"); System.out.println(" lang's value is ===>"+ap.evalXPathToString()); } } 

Puoi usare:

 (//@lang)[1] 

questo significa che ottieni tutti i nodes degli attributi con il nome uguale a “lang” e ottieni il primo.

Se stai usando PostgreSQL, questo è il modo giusto per ottenerlo. Questa è solo un’ipotesi in cui, come si dispone di una tabella TITLE e PRICE di una tabella di libri con dati popolati. Ecco la query

 SELECT xpath('/bookstore/book/title/@lang', xmlforest(book.title AS title, book.price AS price), ARRAY[ARRAY[]::TEXT[]]) FROM book LIMIT 1;