2013-07-04 40 views
8

我有以下問題是現有的:如何檢查用java,如果一個特定的XML元素在XML文檔

我想檢查一下,一個XML文檔是否包含特定的XML元素。是否可以檢查,例如使用特定API的java方法,該方法返回一個布爾值,而XML文檔中是否有特定的XML元素?

這是我的XML文檔爲例:

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

我需要的信息作爲一個布爾值,wheter XML元素區域中現有的或不存在。 XML文檔在我自己的Java類中用作一種字符串。

感謝您的幫助!

回答

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

兩種方式,您可以嘗試使用Java Scanner類來查找特定的字符串(例如經度),假設存在這個單詞i該文件暗示該要素存在。

或者您可以定義一個SAXParser,它使用自定義處理程序遍歷XML文件中的每個元素,但這對於您想要執行的操作可能太複雜。

+3

在一般情況下,將文檔掃描爲文本會使您容易受到誤報,因爲可以合法將匹配項包含在CDATA部分或註釋中。 SAX方法更好。 – McDowell

4

由於文檔是一個字符串,假設你不需要對它進行解析其他原因,我會用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; 
    } 

這個API在SAX解析的好處是,因爲它是一個拉分析器,可以在完成之前停止處理文檔,而不使用像拋出異常這樣的人爲機制。

+0

謝謝。這是非常好的建議。 – MFH

相關問題