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 lang
eng
im Buchtitel ist) erhalten?
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)
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!
Sie können unter dem xPath-Muster versuchen,
XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']")
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"
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;
sie können verwenden:
(//@lang)[1]
dies bedeutet, dass Sie alle Attributknoten mit dem Namen "lang" und den ersten Knoten erhalten.
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());
}
}