2012-08-23 73 views
1

我在我的Activity中使用XML DOM解析器,它必須使用CDATA值解析XML。 DOM解析器對純XML使用絕對正常,但當數據包含CDATA值時,它不起作用。CDATA無法在XML中解析Android

,我需要解析XML文件是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<organizations> 
    <organization> 
    <name><![CDATA[Center for Maximum]]></name> 
    <image><![CDATA[https://www.xyz.com/company_placeholder.png]]></image> 
    <city><![CDATA[Austin]]></city> 
    <state><![CDATA[Texas]]></state> 
    </organization> 
</organizations> 

我已經加入setCoalescing(true)DocumentBuilderFactory對象,但即使如此,它沒有被正確解析。它給出錯誤java.net.MalformedURLException: Protocol not found:。提前致謝。

回答

4

那麼我發現這個問題的唯一解決方案是使用XPATH解析各種項目值。比如,如果我們需要在上面的XML代碼來解析「名稱」項,然後我們需要做到以下幾點:

XMLParser parser = new XMLParser(); 
    String xml = parser.getXmlFromUrl(url); // getting XML from URL 

    Document doc = parser.getDomElement(xml); // getting DOM element 

    XPath xPath = XPathFactory.newInstance().newXPath(); 
    String name = null; 
    try { 
     name=xPath.evaluate("//organization/name/text()", doc).trim(); 
    } 
    catch (XPathExpressionException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

現在字符串name有項目「名稱」的期望值。這是我在解析CDATA的代碼中使用的工作。希望這可以幫助。

+0

我們需要在xPath.evaluate的第一個參數中指定。 –

+0

第一個參數告訴我們需要從XML中獲取其值的元素的名稱。例如,在上面的代碼中,我們得到了「name」的值。 –

+0

感謝這個解決方案,但我只獲得了第一個入口的價值,我有超過100個條目在我的xml與CDATA中,我該怎麼做?請幫我解決這個問題。 –

0

我在我的Activity中使用XML DOM解析器,它必須使用CDATA值解析XML。對於解析CDATA內容,您可以嘗試使用元素上的getTextContent,並且您將能夠獲取CDATA標記中的數據。

NodeList nodeListGetName = doc.getElementsByTagName("name"); 
Element eleName = (Element) nodeListGetName.item(0); 
String strName = eleName.getTextContent(); 

在上面的代碼中,我已經解析了<name>節點的數據。您可以對其他CDATA內容解析使用相同的模式。