XmlResourceParser.getText() 在单引号字符后删除文本,忽略双引号
XmlResourceParser.getText() drops text after single quote char, ignores double quotes
目前正在尝试实现我的 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
没有喜欢文字字符,而是期待实体代码,但我已经尝试将它们换掉,但它仍然忽略它们。
看起来 getResources().getXml()
返回的 XmlResourceParser
根据文档做了一些额外的事情:
https://developer.android.com/reference/android/content/res/Resources.html#getXml(int)
Return an XmlResourceParser through which you can read a generic XML resource for the given resource ID.
The XmlPullParser implementation returned here has some limited functionality. In particular, you can't change its input, and only high-level parsing events are available (since the document was pre-parsed for you at build time, which involved merging text and stripping comments).
虽然它没有明确说明单引号或双引号,但它显然在用 XML 做一些事情。在不更改我的任何代码来解析 XML 的情况下,我通过使用以下内容初始化我自己的 XmlPullParser
来获得所需的输出:
InputStream in = getResources().openRawResource(R.raw.data);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, null);
parse(parser);
目前正在尝试实现我的 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
没有喜欢文字字符,而是期待实体代码,但我已经尝试将它们换掉,但它仍然忽略它们。
看起来 getResources().getXml()
返回的 XmlResourceParser
根据文档做了一些额外的事情:
https://developer.android.com/reference/android/content/res/Resources.html#getXml(int)
Return an XmlResourceParser through which you can read a generic XML resource for the given resource ID.
The XmlPullParser implementation returned here has some limited functionality. In particular, you can't change its input, and only high-level parsing events are available (since the document was pre-parsed for you at build time, which involved merging text and stripping comments).
虽然它没有明确说明单引号或双引号,但它显然在用 XML 做一些事情。在不更改我的任何代码来解析 XML 的情况下,我通过使用以下内容初始化我自己的 XmlPullParser
来获得所需的输出:
InputStream in = getResources().openRawResource(R.raw.data);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, null);
parse(parser);