2012-08-23 57 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内容解析使用相同的模式。