2013-07-04 22 views
8

Ho la seguente domanda:Come controllare con java, se un elemento XML specifico sono esistente in un documento XML

vorrei controllare se un documento XML contiene un elemento XML specifico. È possibile controllare, ad esempio con un metodo java di un'API specifica, che restituisce un valore booleano, a condizione che un elemento XML specifico sia disponibile in un documento XML?

Questo è il mio documento XML come ad esempio:

<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> 

Ho bisogno di informazioni come un valore booleano, anche depurato l'elemento Area XML sono esistenti o non esistenti. Il documento XML viene utilizzato nelle mie classi java come un tipo di stringa.

Grazie per l'aiuto!

risposta

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

due modi , puoi provare la classe Java Scanner per cercare una stringa specifica (ad es. Longitudine) assumendo l'esistenza di questa parola n il documento implica che l'elemento esiste.

Oppure è possibile definire un SAXParser che utilizza un gestore personalizzato per passare attraverso ogni elemento nel file XML, ma che potrebbe essere troppo complicato per ciò che si desidera fare.

+3

Nel caso generale, la scansione del documento come testo lascia vulnerabili ai falsi positivi poiché una corrispondenza può essere legalmente contenuta nelle sezioni o nei commenti CDATA. L'approccio SAX è migliore. – McDowell

4

Dal momento che il documento è una stringa e supponendo che non c'è bisogno di analizzarlo per altri motivi, vorrei utilizzare il 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; 
    } 

Il vantaggio di questa API sopra il parsing SAX è che perché è un parser pull è possibile interrompere l'elaborazione del documento prima del completamento senza utilizzare un meccanismo artificiale come lanciare un'eccezione.

+0

Grazie. È davvero un buon suggerimento. – MFH

Problemi correlati