CDATA没有在XML Android中解析

时间:2012-08-23 08:03:03

标签: android xml-parsing

我在Activity中使用XML DOM Parser,它必须使用CDATA值解析XML。使用纯XML,DOM Parser工作得非常好,但是当数据包含CDATA值时,它不起作用。

我需要解析的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:。提前谢谢。

2 个答案:

答案 0 :(得分:4)

我找到这个问题的唯一解决方案是使用XPATH解析各种项目值。例如,如果我们需要解析上面XML代码中的“name”项,那么我们需要执行以下操作:

    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具有项“name”的所需值。这是我在我的代码中用于解析CDATA的工作。希望这会有所帮助。

答案 1 :(得分:1)

我在Activity中使用XML DOM Parser,它必须使用CDATA值解析XML。要解析CDATA内容,您可以在元素上尝试getTextContent,然后您就可以在CDATA标记内获取数据。

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

在上面的代码中,我解析了<name>节点的数据。您可以使用相同的模式进行其他CDATA内容解析。