解析空标签

时间:2016-02-07 20:21:21

标签: java android xml xmlpullparser

XmlPullParser不解析自动关闭标记,只是跳过它,甚至" isEmptyElementTag"没有帮助。如何解决这个问题呢? 我想解析自我关闭标签公司。

XML结构

<phone>
    <id>1</id>
    <company/> // it should parse
    <model>Galaxy</model>
    <price>18000</price>
</phone>

代码:

    try {
        XmlPullParser xpp = prepareXpp();
        while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {

            switch (xpp.getEventType()) {

                case XmlPullParser.START_TAG:

                    if (xpp.isEmptyElementTag()) {
                        tagName = "company"; }

                      break;

                case XmlPullParser.TEXT:

                    if (tagName.equals("company")) {
                        Log.d(LOG_TAG, "Empty tag"  );
                    }

                    break;
                default:
                    break;
            }

            xpp.next();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    }
  XmlPullParser prepareXpp () {
    return getResources().getXml(R.xml.data);

2 个答案:

答案 0 :(得分:0)

正如您在文档中看到的那样:

  

将报告两个单独的空元素(例如&lt; tag /&gt;)   活动:START_TAG,END_TAG

因此它不会输入case XmlPullParser.TEXT:标记。

如果您向START_TAG添加一些日志记录,您应该在控制台中看到日志:

case XmlPullParser.START_TAG:
    if (xpp.isEmptyElementTag()) {
        Log.d(LOG_TAG, "Empty tag"); 
    }
    break;

编辑:您可以尝试执行下一个解决方法将xml文件移动到原始文件夹并将下一个代码添加到:

XmlPullParser prepareXpp () {
    InputStream istream = getResources().openRawResource(R.raw.data);
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser xpp = factory.newPullParser();
    xpp.setInput(istream, "UTF-8");
    return xpp;
}

答案 1 :(得分:0)

我为此找到了解决方案。 isWhitespace()功能。

当我处理TEXT eventType时,我会评估该函数。

Ang将 null 分配给变量String值。

请注意,仅适用于某些事件类型。

对我来说有效! 最好的问候