384 votes

Obtenir un attribut en utilisant XPath

É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 puis-je obtenir la valeur de lang (où lang es eng dans le titre du livre), pour le premier élément ?

5 votes

Très bon lien pour l'utilisation de xpaths test-able.blogspot.ie/2016/04/xpath-selectors-cheat-sheet.html

540voto

Dimitre Novatchev Points 147842

Comment puis-je obtenir la valeur de lang (où lang=eng dans le titre du livre), pour le le premier élément ?

Utilisez :

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

Cela signifie :

Sélectionnez le lang de l'élément title qui est un enfant du premier élément book enfant de l'élément supérieur du document XML.

Pour obtenir uniquement la valeur de la chaîne de cet attribut, utilisez la fonction XPath standard string() :

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

0 votes

J'ai utilisé la méthode de la chaîne et j'ai obtenu la valeur entre crochets. [attribute_value] . Existe-t-il un moyen d'obtenir la valeur de l'attribut sans les crochets ?

3 votes

@AbhishekAsthana, Le résultat de l'évaluation de l'expression XPath produit exactement la valeur de la chaîne de caractères de l'objet lang l'attribut. Si l'attribut ne contient pas de crochets, ceux-ci ne feront pas partie du résultat de l'évaluation de l'expression XPath. Je suppose qu'ils sont ajoutés par un outil (inapproprié) que vous utilisez.

6 votes

Oui, j'ai trouvé le problème c'est juste la façon dont soapUI l'affiche mais ces parenthèses ne sont pas utilisées lorsque j'utilise la valeur xpath. J'ai vu cela de nombreuses fois. Le problème n'est pas avec l'outil, mais entre la chaise et le clavier.

59voto

smulldino Points 553

Merci ! Cela a résolu un problème similaire que j'avais avec un attribut de données dans un 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 cela aidera quelqu'un d'autre !

7voto

Sharath Points 127

Vous pouvez essayer le modèle xPath ci-dessous,

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

2voto

La formule standard pour extraire les valeurs d'un attribut à l'aide de XPath est la suivante

elementXPath/@attributeName

Voici donc le xpath permettant de récupérer la valeur de la langue du premier attribut

//title[text()='Harry Potter']/@lang

PS : il n'est jamais suggéré d'utiliser les index dans XPath car ils peuvent changer si une balise titre supplémentaire est ajoutée.

1voto

VinodSrivastav Points 1

Vous pouvez également l'obtenir en

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"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X