Whatever. At least something works, even though this is not memory or
gc-friendly. I'll move on to other things for the time being and logged a
bug report.
http://code.google.com/p/android/issues/detail?id=2487

StreetsOfBosten, thanks!

On Wed, Apr 22, 2009 at 5:03 PM, Mariano Kamp <[email protected]>wrote:

> I tried that meanwhile ;-) and it "works". But this is the stream that
> comes directly from the Google Reader service and the standard SDK works
> with it.
>
> But that means parsing each line ... or writing my own decorator to clean
> it up, wouldn't it.
>
> static Document parseXMLfromInputStream(InputStream is, Context context)
> throws ParserConfigurationException, FactoryConfigurationError,
> IOException, SAXException {
> Timing t = U.startTiming("parseXMLFromInputStream");
> DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
> DocumentBuilder builder = dbf.newDocumentBuilder();
>
> StringBuilder sb = new StringBuilder();
> BufferedReader bufferedReader = new BufferedReader(new
> InputStreamReader(is, "UTF-8"), 8 * 1024);
> String line;
> while ((line = bufferedReader.readLine()) != null) {
> sb.append(line.replaceAll("]]>", "]]&gt;") + "\n");
> }
> bufferedReader.close();
> //PrintWriter pw  = new PrintWriter(new
> FileWriter("/data/data/com.newsrob/files/test.output.xml"));
> //pw.print(sb);
> //pw.close();
>
> //BufferedReader br = new BufferedReader(new InputStreamReader(is,
> "UTF-8"), 8 * 1024);
> //BufferedReader br = new BufferedReader(new
> FileReader("/data/data/com.newsrob/files/test.output.xml"));
>
> Document d = null;
> try {
> d = builder.parse(new InputSource(new StringReader(sb.toString())));
> } catch (SAXParseException e) {
> Log.e(TAG, "Exception during parsing:", e);
> Intent i = new Intent();
> i.setClass(context, ShowGoogleErrorActivity.class);
> [..]
> }
> //br.close();
> t.stop();
> return d;
>
> }
>
> On Wed, Apr 22, 2009 at 4:43 PM, Streets Of Boston <
> [email protected]> wrote:
> >
> > First try to change your test-case.
> > Instead of "]]>", do "]]&gt;", just to be sure :-)
> >
> >
> > On Apr 22, 10:40 am, Mariano Kamp <[email protected]> wrote:
> >> Ok,
> >>
> >> I have a smaller test case now:
> >>
> >> DocumentBuilder builder =
> >> DocumentBuilderFactory.newInstance().newDocumentBuilder();
> >>                         String in = "<category term=\"&lt;![CDATA[ Work
> in progress
> >> ]]>\"><test/></category>";
> >>                         Document d = builder.parse(new InputSource(new
> StringReader(in)));
> >>                         System.out.println("OK? => "
> >>                                         +
> (d.getDocumentElement().getElementsByTagName("test").getLength() == 1));
> >>
> >>   It works with the Standard SDK, but not on Android. The full code is
> >> below this post.
> >>
> >>   Standard SDK:
> >>   mariano-kamps-macbook-pro:~ mkamp$
> >> /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/java
> >> -version
> >> java version "1.5.0_16"
> >> Java(TM) 2 Runtime Environment, Standard Edition (build
> 1.5.0_16-b06-284)
> >> Java HotSpot(TM) Client VM (build 1.5.0_16-133, mixed mode, sharing)
> >>
> >>   Result: OK? => true
> >>
> >>   With Android:
> >>
> >> W/System.err( 5135): org.xml.sax.SAXParseException: Illegal: ]]>
> >> (position:START_TAG <category term='null'>@1:49 in
> >> java.io.stringrea...@433eee78)
> >> W/System.err( 5135):    at
> >>
> org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImp­l.java:151)
> >> W/System.err( 5135):    at
> test.xml.TestActivity.onCreate(TestActivity.java:23)
> >> W/System.err( 5135):    at
> >>
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122)
> >> W/System.err( 5135):    at
> >>
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2103)
> >> W/System.err( 5135):    at
> >>
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2156)
> >> W/System.err( 5135):    at
> >> android.app.ActivityThread.access$1800(ActivityThread.java:112)
> >> W/System.err( 5135):    at
> >> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1580)
> >> W/System.err( 5135):    at
> android.os.Handler.dispatchMessage(Handler.java:88)
> >> W/System.err( 5135):    at android.os.Looper.loop(Looper.java:123)
> >> W/System.err( 5135):    at
> >> android.app.ActivityThread.main(ActivityThread.java:3742)
> >> W/System.err( 5135):    at java.lang.reflect.Method.invokeNative(Native
> Method)
> >> W/System.err( 5135):    at
> java.lang.reflect.Method.invoke(Method.java:515)
> >> W/System.err( 5135):    at
> >>
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:­739)
> >> W/System.err( 5135):    at
> >> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:497)
> >> W/System.err( 5135):    at dalvik.system.NativeStart.main(Native Method)
> >> I/ActivityManager(   58): Displayed activity test.xml/.TestActivity: 537
> ms
> >>
> >> Cheers,
> >> Mariano
> >>
> >> Full code goes here.
> >>
> >> Standard SDK:
> >>
> >> import java.io.StringReader;
> >>
> >> import javax.xml.parsers.DocumentBuilder;
> >> import javax.xml.parsers.DocumentBuilderFactory;
> >>
> >> import org.w3c.dom.Document;
> >> import org.xml.sax.InputSource;
> >>
> >> public class Test {
> >>
> >>         public static void main(String[] args) throws Exception {
> >>                 try {
> >>                         DocumentBuilder builder =
> >> DocumentBuilderFactory.newInstance().newDocumentBuilder();
> >>                         String in = "<category term=\"&lt;![CDATA[ Work
> in progress
> >> ]]>\"><test/></category>";
> >>                         Document d = builder.parse(new InputSource(new
> StringReader(in)));
> >>                         System.out.println("OK? => "
> >>                                         +
> (d.getDocumentElement().getElementsByTagName("test").getLength() == 1));
> >>
> >>                 } catch (Exception e) {
> >>                         // TODO Auto-generated catch block
> >>                         e.printStackTrace();
> >>                 }
> >>         }
> >>
> >> }
> >>
> >> Android:
> >>
> >> package test.xml;
> >>
> >> import java.io.StringReader;
> >>
> >> import javax.xml.parsers.DocumentBuilder;
> >> import javax.xml.parsers.DocumentBuilderFactory;
> >>
> >> import org.w3c.dom.Document;
> >> import org.xml.sax.InputSource;
> >>
> >> import android.app.Activity;
> >> import android.os.Bundle;
> >>
> >> public class TestActivity extends Activity {
> >>         /** Called when the activity is first created. */
> >>         @Override
> >>         public void onCreate(Bundle savedInstanceState) {
> >>                 super.onCreate(savedInstanceState);
> >>                 setContentView(R.layout.main);
> >>                 try {
> >>                         DocumentBuilder builder =
> >> DocumentBuilderFactory.newInstance().newDocumentBuilder();
> >>                         String in = "<category term=\"&lt;![CDATA[ Work
> in progress
> >> ]]>\"><test/></category>";
> >>                         Document d = builder.parse(new InputSource(new
> StringReader(in)));
> >>                         System.out.println("OK? => "
> >>                                         +
> (d.getDocumentElement().getElementsByTagName("test").getLength() == 1));
> >>
> >>                 } catch (Exception e) {
> >>                         // TODO Auto-generated catch block
> >>                         e.printStackTrace();
> >>                 }
> >>         }
> >>
> >>
> >>
> >> }
> >> On Wed, Apr 22, 2009 at 3:55 PM, Mariano Kamp <[email protected]>
> wrote:
> >> > Hey,
> >>
> >> > thanks for showing an interest!
> >>
> >> > No, it's not the whole XML and I should have mentioned that.
> >>
> >> > I'll send you the complete file (92k) by mail. But the offending part
> >> > is in here.
> >>
> >> > Cheers,
> >> > Mariano
> >>
> >> > On Wed, Apr 22, 2009 at 3:51 PM, Streets Of Boston
> >> > <[email protected]> wrote:
> >>
> >> >> If your example is the entire XML you try to parse, then the
> exception
> >> >> is valid.
> >> >> Here is the snippet i tried:
> >>
> >> >> <category term="user/xyz/state/com.google/reading-list"
> scheme="http://
> >> >>www.google.com/reader/" label="reading-list"/>
> >> >> <category term="user/xyz/state/com.google/fresh" scheme="http://
> >> >>www.google.com/reader/" label="fresh"/>
> >> >> <category term="&lt;![CDATA[ Agenda ]]&gt;"/>
> >>
> >> >> taken from your post.
> >>
> >> >> Your example is not a valid XML document: It is missing a root-
> >> >> element.
> >> >> This would be valid:
> >>
> >> >> <some_root_elm>
> >> >>  <category term="user/xyz/state/com.google/reading-list"
> >> >> scheme="http://www.google.com/reader/"; label="reading-list"/>
> >> >>  <category term="user/xyz/state/com.google/fresh" scheme="http://
> >> >>www.google.com/reader/" label="fresh"/>
> >> >>  <category term="&lt;![CDATA[ Agenda ]]&gt;"/>
> >> >> </some_root_elm>
> >>
> >> >> When I tried to paste your example in an XML editor, i got a similar
> >> >> error that you got in your DOM parser. The fact that ']]>' is
> >> >> mentioned may be because it is the last thing parsed in your XML
> >> >> snippet.
> >>
> >> >> Try to put a root-element as the parent of your three category
> >> >> elements and see if you still get the problem.
> >>
> >> >> On Apr 22, 8:08 am, Mariano Kamp <[email protected]> wrote:
> >> >>> Hi,
> >>
> >> >>>   yesterday I bitched about all the issues I have with the kXML
> >> >>> parser. (
> http://groups.google.com/group/android-developers/browse_thread/threa...)
> >>
> >> >>>   So now I converted my code to use DOM. And I tried the third
> example
> >> >>> from my referenced mail and it gives me an exception too.
> >>
> >> >>>   I get a SAXParseExeption when parsing an atom feed from Google
> Reader:
> >>
> >> >>> org.xml.sax.SAXParseException: Illegal: ]]> (position:START_TAG
> >> >>> <category term='user/xyz/state/com.google/fresh'>@5:15061 in
> >> >>> java.io.bufferedrea...@4348a0e8)
> >> >>>         at
> org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImp­­l.java:151)
> >> >>>         at com.newsrob.U.parseXMLfromInputStream(U.java:45)
> >> >>>         at
> com.newsrob.EntriesRetriever.fetchNewEntries(EntriesRetriever.java:299)
> >> >>>         at
> com.newsrob.SynchronizationService$4.run(SynchronizationService.java:172)
> >> >>>         at
> com.newsrob.SynchronizationService.doSync(SynchronizationService.java:337)
> >> >>>         at
> com.newsrob.SynchronizationService.access$0(SynchronizationService.java:86)
> >> >>>         at
> com.newsrob.SynchronizationService$1.run(SynchronizationService.java:75)
> >> >>>         at java.lang.Thread.run(Thread.java:935)
> >>
> >> >>>  I think the problem originates here (see the last category tag):
> >>
> >> >>> <category term="user/xyz/state/com.google/reading-list"
> >> >>> scheme="http://www.google.com/reader/";
> label="reading-list"/><category
> >> >>> term="user/xyz/state/com.google/fresh"
> >> >>> scheme="http://www.google.com/reader/"; label="fresh"/><category
> >> >>> term="&lt;![CDATA[ Agenda ]]&gt;"/>
> >>
> >> >>>  Any idea why this happens?
> >>
> >> >>>  This is the (abbreviated) code I use to parse the stream from
> Google Reader.
> >>
> >> >>> DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
> >> >>> dbf.setCoalescing(true); // added this later with no effect
> >>
> >> >>> DocumentBuilder builder = dbf.newDocumentBuilder();
> >>
> >> >>> BufferedReader br = new BufferedReader(new
> >> >>> InputStreamReader(is,"UTF-8"), 8 * 1024);
> >> >>> builder.parse(new InputSource(br));
> >>
> >> >>>   Any help is appreciated.
> >>
> >> >>>   Is there a third parser on Android, besides Harmony's SAXParser
> and
> >> >>> kXML's Pull Parser?
> >>
> >> >>> Cheers,
> >> >>> Mariano- Hide quoted text -
> >>
> >> - Show quoted text -
> > > >
> >
>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to