2014-01-14 99 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