XmlResourceParser.getText()在单引号char后删除文本,忽略双引号

时间:2018-02-04 06:05:39

标签: java android xml android-xmlpullparser

目前正在尝试实现我的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喜欢字面字符,而是期待实体代码,但我尝试将它们交换出来但它仍然忽略它们。

1 个答案:

答案 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);