我正在尝试解析来自 http 请求的响应。这是我根据该响应制作的字符串:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://my-web-address.com/webservices/"><NewDataSet>
<Case>
<ID>260023277</ID>
<CaseNumber>8931-04-03</CaseNumber>
</Case>
.
.
.
</NewDataSet></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/