2013-07-04 2 views
8

Ich habe folgende Frage:Wie mit Java überprüfen, ob eine bestimmte XML-Element in einem XML-Dokument vorhandenen

ich prüfen möchte, ob ein XML-Dokument ein bestimmtes XML-Element enthält. Ist es möglich, zum Beispiel mit einer Java-Methode einer bestimmten API, die einen booleschen Wert zurückgibt, zu prüfen, ob ein bestimmtes XML-Element in einem XML-Dokument verfügbar ist?

Das ist mein XML-Dokument als Beispiel:

<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <ServiceRequest>  
    <RequestPayload> 
     <LocationInformationRequest> 
      <InitialInput> 
       <GeoRestriction> 
        <Area> 
         <PolylinePoint> 
          <Longitude>11.0</Longitude> 
          <Latitude>12.0</Latitude> 
          <Altitude>13.0</Altitude> 
         </PolylinePoint>        
        </Area> 
       </GeoRestriction> 
      </InitialInput> 
     </LocationInformationRequest> 
    </RequestPayload> 
    </ServiceRequest> 
</Test> 

Ich brauche die Informationen als Booleschen Wert, wheter das XML-Element Gebiet existiert oder nicht vorhanden. Das XML-Dokument wird in meinen eigenen Java-Klassen als Zeichenfolge verwendet.

Vielen Dank für Ihre Hilfe!

Antwort

6
public boolean isElementExists(String content) { 
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
    Document doc = documentBuilderFactory.newDocumentBuilder().parse(new StringReader(content)); 
    NodeList nodeList = inputDoc.getElementsByTagName(tagName); 
    return nodeList.getlength() == 0 ? true : false; 
} 
1

Zwei Wege , könnten Sie versuchen, die Java Scanner Klasse nach einer bestimmten Zeichenfolge (zB Longitude) zu suchen, die Existenz dieses Wortes i vorausgesetzt n Das Dokument impliziert, dass das Element existiert.

Oder Sie könnten einen SAXParser definieren, der ein benutzerdefiniertes Handler verwendet, um jedes Element in der XML-Datei zu durchlaufen, aber das ist möglicherweise zu kompliziert für das, was Sie tun möchten.

+3

Im allgemeinen Fall Scannen Sie das Dokument als Text anfällig für falsch positive Ergebnisse, weil eine Übereinstimmung legal in CDATA Abschnitte oder Kommentare enthalten sein kann. Der SAX-Ansatz ist besser. – McDowell

4

Da das Dokument ein String ist und vorausgesetzt, Sie es nicht aus anderen Gründen analysieren müssen, würde ich die Verwendung StAX API:

public static boolean hasElement(String document, String localName) 
     throws XMLStreamException { 
    Reader reader = new StringReader(document); 
    XMLStreamReader xml = XMLInputFactory.newFactory() 
             .createXMLStreamReader(reader); 
    try { 
     while (xml.hasNext()) { 
     if (xml.next() == XMLStreamConstants.START_ELEMENT 
      && localName.equals(xml.getLocalName())) { 
      return true; 
     } 
     } 
    } finally { 
     xml.close(); 
    } 
    return false; 
    } 

Der Vorteil dieser API über die SAX Parse ist, weil es, dass Ist ein Pull-Parser, ist es möglich, die Verarbeitung des Dokuments vor der Fertigstellung zu stoppen, ohne einen künstlichen Mechanismus wie das Auslösen einer Ausnahme zu verwenden.

+0

Danke. Es ist wirklich ein guter Vorschlag. – MFH

Verwandte Themen