Obteniendo atributo usando XPath

Dada una estructura XML como esta:

   Harry Potter 29.99   Learning XML 39.95   

¿Cómo podría obtener el valor de lang (donde lang es eng en el título del libro), para el primer elemento?

¿Cómo podría obtener el valor de lang (donde lang = eng en el título del libro), para el primer elemento?

Uso :

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

Esto significa :

Seleccione el atributo lang del elemento title que es un elemento secundario del primer elemento secundario del book del elemento superior del documento XML.

Para obtener solo el valor de cadena de este atributo, use la string() función XPath estándar string() :

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

¡Gracias! Esto resolvió un problema similar que tuve con un atributo de datos dentro de una Div.

 
data I do not want

Utilice este xpath: //*[@id="prop_sample"]/@data-want

¡Espero que esto ayude a alguien más!

Puede probar debajo del patrón xPath,

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

También puede obtenerlo

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

aunque si está utilizando XMLDOM con JavaScript puede codificar algo así como

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

y n1.text le dará el valor "eng"

Aquí está el fragmento de obtener el valor de atributo de “lang” con XPath y 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()); } } 

puedes usar:

 (//@lang)[1] 

esto significa que obtienes todos los nodos de atributos con nombre igual a “lang” y obtienes el primero.

Si está utilizando PostgreSQL, esta es la forma correcta de obtenerlo. Esto es solo una suposición donde, como tiene una tabla de libros , TÍTULO y columna PRECIO con datos poblados. Aquí está la consulta

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