使用 Android 的 XmlPullParsers 解析无效的 & 符号
-
20-09-2019 - |
题
我正在编写一个消耗一些 XHTML 的小屏幕抓取应用程序 - 不用说 XHTML 是无效的:& 符号不会转义为 &
.
我正在使用安卓的 XmlPullParser
如果编码值不正确,它会发出以下错误:
org.xmlpull.v1.XmlPullParserException: unterminated entity ref
(position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'>
@55:134 in java.io.InputStreamReader@43b1ef70)
我该如何解决这个问题?我考虑过以下解决方案:
- 包裹着
InputStream
在另一个用实体引用替换&符号的例子中 - 配置解析器,使其神奇地接受不正确的标记
哪些可能会更成功?
解决方案
我会选择你的第一个选择,替换&符号似乎比另一个更合适的解决方案。第二个选项似乎更像是 黑客 通过接受不正确的标记来使其工作。
其他提示
我在这个问题上停留了大约一个小时,然后才发现在我的例子中,XML PULL PARSER 无法解析“&”,所以我找到了解决方案。所以这里有一段代码可以完全解决这个问题。
void ParsingActivity(String r) {
try {
parserCreator = XmlPullParserFactory.newInstance();
parser = parserCreator.newPullParser();
// Here we give our file object in the form of a stream to the
// parser.
parser.setInput(new StringReader(r.replaceAll("&", "&")));
// as a SAX parser this will raise events/callback as and when it
// comes to a element.
int parserEvent = parser.getEventType();
// we go thru a loop of all elements in the xml till we have
// reached END of document.
while (parserEvent != XmlPullParser.END_DOCUMENT) {
switch (parserEvent) {
// if u have reached start of a tag
case XmlPullParser.START_TAG:
// get the name of the tag
String tag = parser.getName();
几乎我正在做的事情我只是替换 &
和 &
因为我正在处理解析 URL。希望这可以帮助。
不隶属于 StackOverflow