wake-up-neo.net

Attribut mit XPath abrufen

Gegeben eine XML-Struktur wie folgt:

<?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>

Wie könnte ich für das erste Element den Wert von lang (wobei langeng im Buchtitel ist) erhalten?

299
dotnetdev

Wie könnte ich den Wert von lang erhalten (wobei lang = eng im Buchtitel ist), für das erste Element?

Benutzen :

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

Das heisst :

Wählen Sie das Attribut lang des title-Elements aus, das dem ersten book-Kind des obersten Elements des XML-Dokuments untergeordnet ist.

Um nur den String-Wert dieses Attributs zu erhalten, verwenden Sie die Standard-XPath-Funktion string():

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

Vielen Dank! Dies löste ein ähnliches Problem, das ich mit einem Datenattribut in einem Div hatte. 

<div id="prop_sample" data-want="data I want">data I do not want</div>

Verwenden Sie diesen xpath: //*[@id="prop_sample"]/@data-want

Hoffe das hilft jemand anderem!

34
smulldino

Sie können unter dem xPath-Muster versuchen, 

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

Sie können es auch erhalten

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

wenn Sie XMLDOM mit JavaScript verwenden, können Sie so etwas wie Code schreiben

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

und n1.text gibt Ihnen den Wert "eng"

1
Vinod Srivastav

Wenn Sie PostgreSQL verwenden, ist dies der richtige Weg, um es zu erhalten. Dies ist nur eine Annahme, bei der Sie über eine book tableTITLEundPRICESpalte mit Daten verfügen. Hier ist die Frage

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

sie können verwenden:

(//@lang)[1]

dies bedeutet, dass Sie alle Attributknoten mit dem Namen "lang" und den ersten Knoten erhalten.

0
starcwl

Hier ist der Ausschnitt des Abrufs des Attributwerts "lang" mit XPath und 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());
    }
}
0
vtd-xml-author