XmlPullParser unclosed标签忽略

时间:2014-01-14 12:36:14

标签: java android xml

我遇到的问题是我的应用程序正在接收的XML数据有点破坏。 因为我无法做任何事情,我需要找到一个解决方法。

这是损坏部分的样子:

<line> I like cookies <u>Do you like them too?</u> </line>

我有办法强制XmlPullParser忽略u&amp; / U

现在我能够阅读LINE字符串的第一部分,但我还需要其余部分。

或者有什么方法可以阅读u&amp; / u作为普通字符串而不是标签?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以在解析中使用一些逻辑,通过忽略您不想要的标记从XML中提取测试。对于您提供的示例,您可以执行以下操作来捕获标记之间的所有文本,而不管其中包含哪些标记:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    XmlPullParser xpp = factory.newPullParser();
    boolean inLineTag = false;
    StringBuilder strBldr = new StringBuilder();
    xpp.setInput(new StringReader(
            "<line> I like cookies <u>Do you like them too?</u> </line>"));
    int eventType = xpp.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT) {
        if (eventType == XmlPullParser.START_TAG) {
            if(("line").equals(xpp.getName())){
                inLineTag = true;
            }
        } else if (eventType == XmlPullParser.END_TAG) {
            if(("line").equals(xpp.getName())){
                inLineTag = false;
            }
        } else if (eventType == XmlPullParser.TEXT) {
            if (inLineTag) {
                strBldr.append(xpp.getText());
            } 
        }
        eventType = xpp.next();
    }

    System.out.println("Text " + strBldr.toString());
}

希望有所帮助!

答案 1 :(得分:0)

最好让您的提供商以CDATA标签发送此类数据,以便您能够将其解析为单个字符串
例如&lt; line&gt;我喜欢cookies&lt ; u&gt;你也喜欢它们吗?&lt; / u&gt;&lt;![CDATA [&lt; sender&gt; John Smith&lt; / sender&gt;]]&gt; &LT; /线&GT;