Android SAX XML 解析错误

标签 android xml xml-parsing sax saxparser

我正在尝试解析来自 http 请求的响应。这是我根据该响应制作的字符串:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://my-web-address.com/webservices/">&lt;NewDataSet&gt;
    &lt;Case&gt;
    &lt;ID&gt;260023277&lt;/ID&gt;
    &lt;CaseNumber&gt;8931-04-03&lt;/CaseNumber&gt;

     &lt;/Case&gt;

    .
    .
    .
    &lt;/NewDataSet&gt;</string>

所有元素(用点表示)都是有效的。
以下是我如何使用 sax 解析此 xml:

        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();

        InputSource inputSource = new InputSource( new StringReader( responce ) ); // responce is my String containing XML.
        CasesParser myXMLHandler = new CasesParser();
        xr.setContentHandler(myXMLHandler);
        xr.parse(inputSource);

CaseParser类扩展 DefaultHandler并以常规方式实现所有功能。

所以确切的错误是解析器没有检测到“字符串”元素以外的任何东西。它在 startElement() 中检测到它CaseParser的方法|然后也在 endElement()方法。解析器在两者之​​间没有找到其他元素。
在检索“字符串”的值后,我只得到 '<'特点。没有其他的。

可能是什么问题?

最佳答案

你的主要问题是所有的 xml 标签都被转义了,这使得它们不是真正的 xml 标签。

如果可能,您可能想与制作此内容的人交谈,并让他们更改它,以免此数据被转义。

如果请求更好的数据是不可能的,那么您可能需要阅读 <string> 的所有内容。将标记转换为字符串,然后启动另一个解析器来解析该字符串的内容,第一次解析时不会转义。

如果你得到的只是一个 '<'性格,你可能犯了一个常见的错误,即期待 characters方法只能调用一次。它可以被多次调用,你需要将数据收集到一个缓冲区中,然后在 endElement 中将其转换为字符串。方法。

有关包含此收集逻辑的示例代码,请参阅 my answer to a related question .

一旦你正确地得到了这个解析,就得到了<string>的所有内容。标记为 Java String ,您需要将该字符串用作另一个解析的内容。

关于Android SAX XML 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20107437/

相关文章:

javascript - 如何使用 Javascript 或 jQuery 解析 xml webservice 响应

java - 错误 "Caused by: java.lang.ClassNotFoundException:"

java - setPageLoad() 在 Android 中不起作用

java - 为什么我会收到此错误 : E/ERROR: The executeQuery method must return a result set. ?

java - JAXB、XSD 样式表和元素名称冲突解决

r - 如何使用表格列表

Android 下拉菜单(无微调器!)

android - 我想将 Scrollview 添加到 Button?

c# - 获取 Xml 属性

python - 如何根据XML中XPath中子节点的值获取特定的 block (组)?