Étant donné une structure XML comme celle-ci:
<?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>
Comment obtenir la valeur lang
(où lang
est eng
dans le titre du livre), pour le premier élément?
Comment pourrais-je obtenir la valeur de lang (où lang = eng dans le titre du livre), pour le premier élément?
Utilisation :
/*/book[1]/title/@lang
Ça signifie :
Sélectionnez l'attribut lang
de l'élément title qui est un enfant du premier book
enfant de l'élément supérieur du document XML.
Pour obtenir uniquement la valeur de chaîne de cet attribut, utilisez la fonction standard XPath string()
:
string(/*/book[1]/title/@lang)
Merci! Cela a résolu un problème similaire que j'avais avec un attribut de données à l'intérieur d'une div.
<div id="prop_sample" data-want="data I want">data I do not want</div>
Utilisez ce xpath: //*[@id="prop_sample"]/@data-want
J'espère que ceci aide quelqu'un d'autre!
Vous pouvez essayer ci-dessous le modèle xPath,
XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']")
Vous pouvez aussi l'obtenir par
string(//bookstore/book[1]/title/@lang)
string(//bookstore/book[2]/title/@lang)
bien que si vous utilisez XMLDOM avec JavaScript, vous pouvez coder quelque chose comme:
var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang");
et n1.text
vous donnera la valeur "eng"
Si vous utilisez PostgreSQL, c'est la bonne façon de l'obtenir. Ceci est juste une hypothèse dans laquelle vous avez une colonne book tableTITLEetPRICEavec des données renseignées. Voici la requête
SELECT xpath('/bookstore/book/title/@lang', xmlforest(book.title AS title, book.price AS price), ARRAY[ARRAY[]::TEXT[]]) FROM book LIMIT 1;
vous pouvez utiliser:
(//@lang)[1]
cela signifie que vous obtenez tous les attributs avec un nom égal à "lang" et que vous obtenez le premier.
Voici l'extrait permettant d'obtenir la valeur d'attribut de "lang" avec XPath et 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());
}
}