【发布时间】:2018-02-04 06:05:38
【问题描述】:
目前正在尝试实现我的 iOS 应用程序的 Android 版本,并在解析 XML 时遇到一些问题,其中文本包含单引号或双引号字符(它是外语的字典应用程序)。
我的应用程序的所有数据都是从 XML 资源文件加载的。这是该文件的示例:
<entry>
<word>afa'i fā</word>
<definition>See under "afa". Figurative (especially in poetry), king or queen: "hotau afa'i fā".</definition>
</entry>
我通过调用检索XmlResourceParser:
XmlResourceParser parser = getResources().getXml(R.xml.data);
parse(parser);
这是我的解析代码:
public void parse(XmlResourceParser parser) throws XmlPullParserException, IOException {
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
startTag(parser.getName(), parser);
break;
case XmlPullParser.END_TAG:
endTag(parser.getName(), parser);
break;
case XmlPullParser.TEXT:
foundText(parser.getText());
break;
default:
break;
}
eventType = parser.next();
}
}
在解析文本时,XmlResourceParser 的 getText() 方法会删除 ' 之后的所有内容,并使用下一个节点内的文本重新拾取。此外,它只是忽略了双引号。我的结果如下所示:
(word)
afa
(definition)
See under afa. Figurative (especially in poetry), king or queen: hotau afa
我浏览了文档,似乎在文档中找不到任何关于处理单引号和双引号的内容...我唯一能想到的是 XmlResourceParser 不喜欢文字字符而是期待实体代码,但我尝试将它们换掉,但它仍然忽略它们。
【问题讨论】:
-
尝试在单引号前使用“\”。所以现在你的文本将是
afa\'i fā -
@MashukKhan XML 文本中的
'或"没有什么特别之处。逃避是不必要的。即使是这样,正确的转义也将分别是&apos;和&quot;。 -
@ngoue 你是怎么得到这个输出的?解析器可以将文本分解为多个文本事件。
-
@Henry 我也有同样的想法——但我的 while/switch 是为处理每一个
TEXT事件而构建的,在foundText中,我总是从以前的文本中构建一个字符串,并结合任何新的文本(即setText(previousText + newText)) -
使用调试器手动进行单步调试,我可以确认我没有遗漏任何文本事件——解析器只是没有在(包括)单引号之后报告任何文本...
标签: java android xml android-xmlpullparser