Wie funktioniert XPath Umgang mit XML-namespaces?

Wie funktioniert XPath Umgang mit XML-namespaces?

Wenn ich

/IntuitResponse/QueryResponse/Bill/Id

Parsen das XML-Dokument unten bekomme ich 0 Knoten zurück.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" 
                time="2016-10-14T10:48:39.109-07:00">
    <QueryResponse startPosition="1" maxResults="79" totalCount="79">
        <Bill domain="QBO" sparse="false">
            <Id>=1</Id>
        </Bill>
    </QueryResponse>
</IntuitResponse>

Allerdings bin ich nicht der Angabe des namespace der XPath (d.h. http://schema.intuit.com/finance/v3 ist kein Präfix von jedem token des Pfades). Wie kann XPath wissen, welche Id ich wollen, wenn ich sage es nicht explizit? Ich vermute, in diesem Fall (da es nur einen namespace) XPath konnte man mit ignorieren der xmlns ganz. Aber wenn es mehrere namespaces, die Dinge könnten hässlich werden.

Ihre XPath-sollte nicht wieder jeder node : INFO - XPath-0 zurückgegeben Elemente (zusammengestellt in 0ms, bewertet in 1ms). Wie haben Sie die Ausführung der XPath?
Ich habe es in Java mit Hilfe von import javax.xml.xpath.XPath. Ich Stimme zu, es funktioniert nicht mit einem online-tester. Das war einer der verwirrenden Dinge.
Gute Frage! XPath selbst bietet keine Methode zum festlegen eines default-namespace oder die Bindung eines namespace-Präfix für einen namespace. Glücklicherweise jedoch, hosting-Sprachen und-Bibliotheken tun. Siehe meine Antwort weiter unten für details...
Nicht ganz sicher, warum die Frage sollte sein, von Ihnen positiv bewertet werden, so hoch, als es gebeten wurde, und antwortete 1000 mal vor....
Ich war beeindruckt von dieser Frage, weil, im Gegensatz zu den meisten vorherigen askers, dass Adam nicht nur ein minimale reproduzierbare Beispiel, er spürte und vermittelt die Notwendigkeit für XPath Umgang mit XML-namespaces irgendwie. Die meisten, die solche Fragen nur post, die einen XPath, vielleicht einige XML - (und wenn wir Glück haben, ist es nicht ein Bild oder ein link zu einem gigantischen off-site-resource), und behaupten, dass es "nicht funktioniert." Adam spürte, es hatte damit zu tun, namespaces, nagelte den Titel, und schrieb das, was ich als eine Frage verdient eine kanonische Antwort.

InformationsquelleAutor Adam | 2016-11-25

Schreibe einen Kommentar