CDATA无法在XML中解析Android
问题描述:
我在我的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:
。提前致谢。
答
那么我发现这个问题的唯一解决方案是使用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的代码中使用的工作。希望这可以帮助。
答
我在我的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内容解析使用相同的模式。
我们需要在xPath.evaluate的第一个参数中指定。 –
第一个参数告诉我们需要从XML中获取其值的元素的名称。例如,在上面的代码中,我们得到了“name”的值。 –
感谢这个解决方案,但我只获得了第一个入口的价值,我有超过100个条目在我的xml与CDATA中,我该怎么做?请帮我解决这个问题。 –