Wie überprüfe ich mit XPath, ob ein Element im XML vorhanden ist?

Lesezeit: 3 Minuten

Benutzer-Avatar
Aravind Yarram

Unten ist meine Elementhierarchie. Wie man das (mit XPath) überprüft AngehängtesXml Element ist unter vorhanden Kreditbericht von Primär Verbraucher

<Consumers xmlns="http://xml.mycompany.com/XMLSchema">
       <Consumer subjectIdentifier="Primary">
          <DataSources>
               <Credit>
                   <CreditReport>
                      <AttachedXml><![CDATA[ blah blah]]>

  • Welche Sprache verwenden Sie, um das XML auszuführen und den XPath zu analysieren? Die Antwort hängt davon ab.

    – Jon Gauthier

    16. April 2011 um 22:15 Uhr

  • Es ist eine Java-Engine (sächsisch), von der ich glaube, dass sie in SoapUI verwendet wird

    – Aravind Yarram

    16. April 2011 um 22:21 Uhr

Benutzer-Avatar
Mad Hansen

Verwenden Sie die boolean() XPath-Funktion

Die boolesche Funktion wandelt ihr Argument wie folgt in einen booleschen Wert um:

  • eine Zahl ist genau dann wahr, wenn sie weder positive oder negative Null noch NaN ist

  • Eine Knotenmenge ist genau dann wahr, wenn sie nicht leer ist

  • Ein String ist genau dann wahr, wenn seine Länge nicht Null ist

  • ein Objekt eines anderen Typs als den vier Grundtypen wird auf eine von diesem Typ abhängige Weise in einen booleschen Wert konvertiert

Wenn es eine gibt AngehängtesXml in dem Kreditbericht von primär Verbraucherdann kehrt es zurück true().

boolean(/mc:Consumers
          /mc:Consumer[@subjectIdentifier="Primary"]
            //mc:CreditReport/mc:AttachedXml)

  • Dies gibt auch wahr zurück, wenn AttachedXml NICHT VORHANDEN ist … was fehlt mir?

    – Aravind Yarram

    18. April 2011 um 14:56 Uhr

  • Es sollte nicht. Wenn es zurückkehrt true(), dann passt der XPath und wählt etwas aus. Es sollte zurückkehren false() wenn nichts ausgewählt ist.

    – Mads Hansen

    18. April 2011 um 15:20 Uhr

Das Sächsische Dokumentationobwohl etwas unklar, scheint darauf hinzudeuten, dass die JAXP XPath API zurückkehren wird false beim Auswerten eines XPath-Ausdrucks, wenn keine übereinstimmenden Knoten gefunden werden.

Dieser IBM-Artikel erwähnt einen Rückgabewert von null wenn keine Knoten übereinstimmen.

Möglicherweise müssen Sie basierend auf dieser API ein wenig mit den Rückgabetypen herumspielen, aber die Grundidee ist, dass Sie einfach einen normalen XPath ausführen und prüfen, ob das Ergebnis ein Knoten ist / false / null / etc.

XPathFactory xpathFactory = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);
XPath xpath = xpathFactory.newXPath();
XPathExpression expr = xpath.compile("/Consumers/Consumer/DataSources/Credit/CreditReport/AttachedXml");
Object result = expr.evaluate(doc, XPathConstants.NODE);

if ( result == null ) {
    // do something
}

Benutzer-Avatar
Dimitre Nowatschew

Verwenden:

boolean(/*/*[@subjectIdentifier="Primary"]/*/*/*/*
                           [name()='AttachedXml' 
                          and 
                            namespace-uri()='http://xml.mycompany.com/XMLSchema'
                           ]
       )

Benutzer-Avatar
Simon StenderBoisen

Wenn Sie versuchen, einen Knoten mit xpath auszuwählen, gibt Ihre xpath-Engine normalerweise null oder etwas Äquivalentes zurück, wenn der Knoten nicht existiert.

xpath: "/Consumers/Consumer/DataSources/Credit/CreditReport/AttachedXml"

Wenn Sie xsl verwenden, sehen Sie sich diese Frage an, um eine Antwort zu erhalten:

xpath finden, wenn Knoten vorhanden ist

schau dir mein beispiel an

<tocheading language="EN"> 
     <subj-group> 
         <subject>Editors Choice</subject> 
         <subject>creative common</subject> 
     </subj-group> 
</tocheading> 

jetzt, wie man prüft, ob creative common ist vorhanden

tocheading/subj-group/subject/text() = 'creative common'

hoffe das hilft dir

Benutzer-Avatar
Boris Stitnicky

Wenn boolean() nicht verfügbar ist (das Tool, das ich verwende, nicht), ist eine Möglichkeit, dies zu erreichen:

//SELECT[@id='xpto']/OPTION[not(not(@selected))]

In diesem Fall ist innerhalb der /OPTION eine der Optionen die ausgewählte. Das “Ausgewählte” hat keinen Wert … es existiert einfach, während die anderen OPTIONEN kein “Ausgewähltes” haben. Damit ist das Ziel erreicht.

1054030cookie-checkWie überprüfe ich mit XPath, ob ein Element im XML vorhanden ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy