javaxmlplist

Java Plist XML Parsing


I'm parsing a (not well formed) Apple Plist File with java.

My Code looks like this:

InputStream in = new FileInputStream( "foo" ); 
XMLInputFactory factory = XMLInputFactory.newInstance(); 
XMLEventReader parser = factory.createXMLEventReader( in ); 
while (parser.hasNext()){    
XMLEvent event = parser.nextEvent();    
  //code to navigate the nodes 
}

The parts I"m parsing are looking like this:

<dict>    
  <key>foo</key><integer>123</integer>
  <key>bar</key><string>Boom &amp; Shroom</string>
</dict>

My problem is now, that nodes containing a ampersand are not parsed like they should because the ampersand is representing a entity.

What can i do to get the value of the node as a complete String, instead of broken parts?

Thank you in advance.


Solution

  • You should be able to solve your problem by setting the IS_COALESCING property on the XMLInputFactory (I also prefer XMLStreamReader over XMLEventReader, but ymmv):

    XMLInputFactory factory = XMLInputFactory.newInstance();
    factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
    
    InputStream in = // ...
    xmlReader = factory.createXMLStreamReader(in, "UTF-8");
    

    Incidentally, to the best of my knowledge none of the JDK parsers will handle "not well formed" XML without choking. Your XML is, in fact, well-formed: it uses an entity rather than a raw ampersand.