2013-07-04 6 views
8

Mam następujące pytanie:Jak sprawdzić z java, czy dany element XML są istniejące w dokumencie XML

chciałbym sprawdzić, czy dokument XML zawiera konkretny element XML. Czy jest możliwe sprawdzenie, na przykład za pomocą metody Java określonego API, która zwraca wartość boolowską, czy określony element XML jest dostępny w dokumencie XML?

To jest mój dokument XML jako przykład:

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

Potrzebuję informacji jako wartości logicznej, wheter element Area XML są istniejące lub nieistniejące. Dokument XML jest używany we własnych klasach java jako typ ciągu znaków.

Dzięki za pomoc!

Odpowiedz

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

dwa sposoby , możesz wypróbować klasę Java Scanner, aby wyszukać konkretny ciąg znaków (np. długość), zakładając istnienie tego słowa i n dokument wskazuje, że element istnieje.

Lub możesz zdefiniować SAXParser, który używa niestandardowego programu obsługi do przechodzenia przez każdy element w pliku XML, ale może to być zbyt skomplikowane dla tego, co chcesz zrobić.

+3

W ogólnym przypadku skanowanie dokumentu jako tekstu pozostawia podatne na fałszywe alarmy, ponieważ dopasowanie może legalnie być zawarte w sekcjach lub komentarzach CDATA. Podejście SAX jest lepsze. – McDowell

4

Ponieważ dokument jest ciągiem i zakładając, że nie trzeba analizować je z innych powodów, chciałbym użyć 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; 
    } 

Zaletą tego rozwiązania nad parsowania SAX jest to, że ponieważ to jest parserem ściągania, możliwe jest zatrzymanie przetwarzania dokumentu przed zakończeniem bez użycia sztucznego mechanizmu, takiego jak zgłoszenie wyjątku.

+0

Dziękuję. To naprawdę dobra sugestia. – MFH

Powiązane problemy