First try to change your test-case.
Instead of "]]>", do "]]>", 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