2

我在我的活动中使用 XML DOM 解析器,它必须使用 CDATA 值解析 XML。DOM Parser 对纯 XML 工作得非常好,但是当数据包含 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:。提前致谢。

4

2 回答 2

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 的解决方法。希望这可以帮助。

于 2012-09-25T03:38:52.780 回答
1

我在我的活动中使用 XML DOM 解析器,它必须使用 CDATA 值解析 XML。对于解析 CDATA 内容,您可以在元素上尝试 getTextContent,您将能够在 CDATA 标记内获取数据。

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

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

于 2017-10-27T17:09:55.937 回答