xml - online - Obteniendo atributo usando XPath
xpath xml (7)
¿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 de título que es un elemento secundario del primer elemento secundario 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)
Dada una estructura XML como tal:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
¿Cómo podría obtener el valor de lang
(donde lang
es eng
en el título del libro), para el primer elemento?
¡Gracias! Esto resolvió un problema similar que tuve con un atributo de datos dentro de una Div.
<div id="prop_sample" data-want="data I want">data I do not want</div>
Use este xpath: //*[@id="prop_sample"]/@data-want
¡Espero que esto ayude a alguien más!
Aquí está el fragmento de obtener el valor del atributo "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 probar debajo del patrón xPath,
XPathExpression expr = xPath.compile("/bookstore/book/title[@lang=''eng'']")
Si está utilizando PostgreSQL, esta es la forma correcta de obtenerlo. Esto es solo una suposición en la que, como usted tiene una columna de TÍTULO y PRECIO de la tabla de libros con datos completados. 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;
También puedes conseguirlo por
string(//bookstore/book[1]/title/@lang)
string(//bookstore/book[2]/title/@lang)
aunque si está utilizando XMLDOM con JavaScript, puede codificar algo como
var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang");
y n1.text
le dará el valor "eng"
puedes usar:
(//@lang)[1]
esto significa que obtienes todos los nodos de atributos con un nombre igual a "lang" y obtienes el primero.