web-dev-qa-db-de.com

Wie kann man mithilfe von xpath überprüfen, ob ein Element in der XML vorhanden ist?

Unten ist meine Elementhierarchie. So überprüfen Sie (mithilfe von xpath), ob das AttachedXml -Element unter CreditReport von Primary - vorhanden ist Verbraucher

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

Verwenden Sie die Funktion boolean() XPath

Die Boolesche Funktion konvertiert ihr Argument wie folgt in einen Booleschen Wert:

  • eine Zahl ist nur dann wahr, wenn sie weder eine positive noch eine negative Null noch eine 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 der vier Basistypen wird in einer von diesem Typ abhängigen Weise in einen Booleschen Wert konvertiert

Wenn es ein AttachedXml im CreditReport von primary gibt Consumer , dann wird true() zurückgegeben.

boolean(/mc:Consumers
          /mc:Consumer[@subjectIdentifier='Primary']
            //mc:CreditReport/mc:AttachedXml)
80
Mads Hansen

Verwenden:

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

Die sächsische Dokumentation scheint, obwohl ein wenig unklar, darauf hinzudeuten, dass die JAXP XPath-API false zurückgibt, wenn ein XPath-Ausdruck ausgewertet wird, 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 mit den Rückgabetypen ein wenig auf der Grundlage dieser API herumspielen, aber die Grundidee ist, dass Sie nur 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
}
5
Jon Gauthier

Wenn Sie versuchen, einen Knoten mit xpath auszuwählen, gibt Ihre xpath-engine normalerweise null oder ein Äquivalent zurück, wenn der Knoten nicht vorhanden ist.

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

Wenn Sie xsl verwenden, überprüfen Sie diese Frage auf eine Antwort:

xpath find if node exists

schauen Sie sich mein Beispiel an

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

nun, wie prüfe ich, ob creative common ist vorhanden

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

hoffe das hilft dir

1