2014-01-14 58 views
1

我遇到的问题是我的应用程序正在接收的XML数据有点损坏。 因为我无法做任何事情,所以我需要找到解决方法。XmlPullParser unclosed标记忽略

这部分如何损坏的样子:

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

我有什么办法来迫使XmlPullParser忽略的U &/U?

现在我可以读取LINE字符串的第一部分,但我也需要其余部分。

或者是否有任何方法可以将u &/u作为普通字符串而不是标签?

感谢您的帮助!

回答

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()); 
} 

希望帮助!

+0

感谢队友,帮了我很多! – JakubW

0

倒不如问问你的供应商在CDATA标签发出这样的数据,以便您能够解析它作为一个字符串
例如
<线>我喜欢饼干<ü>难道你喜欢他们吗? </U > <![CDATA [<发件人>约翰·史密斯< /发件人>] > < /线>

+0

是的我很清楚这一点,但它不可能:C – JakubW

+0

另一种方法扭曲你的代码忽略这样的标签,并不断添加文本值。这不是一个好的解决方案,但我怀疑是否有这个问题的直接解决方案。 –

+0

这是我正在寻找。如果你有snipet或一些可以帮助我的方法,那么这将非常有帮助。 – JakubW