目前正在尝试实现我的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
的{{1}}方法会删除getText()
之后的所有内容,然后选择正确的文本在下一个节点内。此外,它只是忽略双引号。我的结果如下:
'
我已经搜索过这些文档,并且似乎无法在文档中找到处理单引号和双引号的内容......我唯一能想到的是(word)
afa
(definition)
See under afa. Figurative (especially in poetry), king or queen: hotau afa
没有& #39; t喜欢字面字符,而是期待实体代码,但我尝试将它们交换出来但它仍然忽略它们。
答案 0 :(得分:1)
根据文档,XmlResourceParser
返回的getResources().getXml()
似乎正在做一些额外的事情:
https://developer.android.com/reference/android/content/res/Resources.html#getXml(int)
返回一个XmlResourceParser,通过它可以读取给定资源ID的通用XML资源。
此处返回的XmlPullParser实现具有一些有限的功能。特别是,您无法更改其输入,只能使用高级解析事件(因为文档在构建时已为您预解析,其中包括合并文本和剥离注释)。
虽然它没有明确说明单引号或双引号,但它显然正在使用XML。在不更改任何代码来解析XML的情况下,我通过使用以下内容初始化自己的XmlPullParser
来获得所需的输出:
InputStream in = getResources().openRawResource(R.raw.data);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, null);
parse(parser);