2015-03-26 19 views
6

sto usando java-json.jar per convertire l'xml in ingresso in json funzionante. L'unico problema in questo momento che sto avendo è che quando l'XML contiene <![CDATA[ <p>some html</p> ]]> si blocca con il seguente registro:conversione da xml a json android

03-26 16:54:56.176 30119-30119/nl.avrotros.opgelicht E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: nl.avrotros.opgelicht, PID: 30119 
    java.lang.NoSuchMethodError: No virtual method end()Z in class Lorg/json/XMLTokener; or its super classes (declaration of 'org.json.XMLTokener' appears in /data/app/nl.avrotros.opgelicht-1/base.apk) 
      at org.json.XMLTokener.nextCDATA(XMLTokener.java:69) 
      at org.json.XML.parse(XML.java:165) 
      at org.json.XML.parse(XML.java:272) 
      at org.json.XML.parse(XML.java:272) 
      at org.json.XML.parse(XML.java:272) 
      at org.json.XML.parse(XML.java:272) 
      at org.json.XML.parse(XML.java:272) 
      at org.json.XML.toJSONObject(XML.java:369) 
      at nl.avrotros.opgelicht.api.Opgelicht.testxmltojson(Opgelicht.java:84) 
      at nl.avrotros.opgelicht.api.Opgelicht.<init>(Opgelicht.java:78) 
      at nl.avrotros.opgelicht.api.Opgelicht.getInstance(Opgelicht.java:395) 
      at nl.avrotros.opgelicht.activity.MainActivity.onCreate(MainActivity.java:38) 
      at android.app.Activity.performCreate(Activity.java:5953) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388) 
      at android.app.ActivityThread.access$800(ActivityThread.java:148) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5312) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 

quando rimuovo la proprietà CDATA tutto va bene e bene.

xml sto cercando di analizzare:

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <hits>17</hits> 
    <max-score>14.431101</max-score> 
    <rows>1</rows> 
    <start>0</start> 
    <facets> 
    <category> 
     <facet value="malware" count="4" /> 
     <facet value="offline webshops" count="4" /> 
     <facet value="opgeletopinternet.nl" count="1" /> 
     <facet value="overig" count="1" /> 
     <facet value="spookfacturen" count="1" /> 
     <facet value="valse e-mails" count="5" /> 
     <facet value="webshops" count="2" /> 
    </category> 
    <facet01 /> 
    </facets> 
    <item id="1" score="14.431101"> 
    <created>1</created> 
    <properties> 
     <property> 
     <key>title</key> 
     <value>'Pas op voor studionstore.com!'</value> 
     </property> 
     <property> 
     <key>teasertitle</key> 
     <value>'Pas op voor studionstore.com!'</value> 
     </property> 
     <property> 
     <key>teasertext</key> 
     <value>Opgeletopinternet.nl waarschuwt voor de malafide webwinkel studionstore·com.</value> 
     </property> 
     <property> 
     <key>intro</key> 
     <value>Opgeletopinternet.nl waarschuwt voor de malafide webwinkel studionstore·com.</value> 
     </property> 
     <property> 
     <key>onlinedate</key> 
     <value>2015-03-26T12:56:54.000000Z</value> 
     </property> 
     <property> 
     <key>episodeonair</key> 
     <value>2015-03-26T12:51:00.000000Z</value> 
     </property> 
     <property> 
     <key>text</key> 
     <value><![CDATA[<p>De malafide webwinkel misbruikt de gegevens van een bonafide bedrijf. Bovendien adverteren ze met te goedkope prijzen. ook hier geldt: wat te mooi lijkt om waar te zijn, is vaak niet waar.<br /><br />Zie hieronder de site.<br /><br /></p>]]></value> 
     </property> 
     <property> 
     <key>status</key> 
     <value>online</value> 
     </property> 
     <property> 
     <key>category</key> 
     <value>Webshops</value> 
     </property> 
     <property> 
     <key>programtitle</key> 
     <value>1</value> 
     </property> 
     <property> 
     <key>programid</key> 
     <value>1</value> 
     </property> 
     <property> 
     <key>owner</key> 
     <value>1</value> 
     </property> 
     <property> 
     <key>source</key> 
     <value>typo3</value> 
     </property> 
     <property> 
     <key>collection</key> 
     <value>alerts</value> 
     </property> 
     <property> 
     <key>portal</key> 
     <value>1</value> 
     </property> 
     <property> 
     <key>type</key> 
     <value>article</value> 
     </property> 
     <property> 
     <key>contenttype</key> 
     <value>article</value> 
     </property> 
     <property> 
     <key>origintype</key> 
     <value>xml</value> 
     </property> 
     <property> 
     <key>resized</key> 
     <value>true</value> 
     </property> 
     <property> 
     <key>converted</key> 
     <value>true</value> 
     </property> 
     <property> 
     <key>image</key> 
     <value> 
      <image default="true"> 
      <imageUrl>http://staticextern.avrotros.nl/images/cc4/OP_tx_news_studionstore.jpg</imageUrl> 
      </image> 
     </value> 
     </property> 
    </properties> 
    <updated>2015-03-26T13:09:28.650Z</updated> 
    </item> 
</resources> 

Qualcuno sa qual è il problema?

sto usando il seguente per analizzare in realtà il xml:

return XML.toJSONObject(xmlString).toString();

+0

Sembra un bug nella libreria JSON. Se riesci a riprodurlo con l'ultima versione, ti suggerisco di inviare un esempio minimo al loro bug tracker. – Heinzi

+0

Indagare ora. Spero che nessuno abbia presentato un problema e ci siamo persi. – stleary

risposta

0

So che è tardi, ma volevo solo farlo funzionare così eccoci qui. Tieni presente che questa è solo una soluzione rapida e non una best practice.

  1. Scarica tutti i file dal Github-Repo: https://github.com/stleary/JSON-java
  2. Aprire XMLTokener.java e commentare fuori linea, 70, 71.
  3. Il gioco è fatto 69. Tieni presente che se lo CDATA non è chiuso, non verrà generato alcun errore, quindi non è il modo migliore per farlo, ma almeno funziona.