javaplistxml解析
我正在用java解析一个(格式不好的)Apple Plist文件 我的代码如下所示:javaplistxml解析,java,xml,plist,Java,Xml,Plist,我正在用java解析一个(格式不好的)Apple Plist文件 我的代码如下所示: InputStream in = new FileInputStream( "foo" ); XMLInputFactory factory = XMLInputFactory.newInstance(); XMLEventReader parser = factory.createXMLEventReader( in ); while (parser.hasNext()){ XMLEvent e
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
}
<dict>
<key>foo</key><integer>123</integer>
<key>bar</key><string>Boom & Shroom</string>
</dict>
我正在分析的部分如下所示:
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
}
<dict>
<key>foo</key><integer>123</integer>
<key>bar</key><string>Boom & Shroom</string>
</dict>
食品123
酒吧间和酒吧间
我现在的问题是,包含符号AND的节点没有像它们应该的那样被解析,因为符号AND代表一个实体
如何将节点的值作为完整字符串而不是断开的部分获取
提前感谢。有一个预定义的方法
getElementText()
,它在jdk1.6.0_15中有缺陷,但在jdk1.6.0_19中可以正常工作。一个完整的程序可以轻松解析plist文件,如下所示:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;
public class Parser {
public static void main(String[] args) throws XMLStreamException, IOException {
InputStream in = new FileInputStream("foo.xml");
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader parser = factory.createXMLEventReader(in);
assert parser.nextEvent().isStartDocument();
XMLEvent event = parser.nextTag();
assert event.isStartElement();
final String name1 = event.asStartElement().getName().getLocalPart();
if (name1.equals("dict")) {
while ((event = parser.nextTag()).isStartElement()) {
final String name2 = event.asStartElement().getName().getLocalPart();
if (name2.equals("key")) {
String key = parser.getElementText();
System.out.println("key: " + key);
} else if (name2.equals("integer")) {
String number = parser.getElementText();
System.out.println("integer: " + number);
} else if (name2.equals("string")) {
String str = parser.getElementText();
System.out.println("string: " + str);
}
}
}
assert parser.nextEvent().isEndDocument();
}
}
您应该能够通过在
XMLInputFactory
上设置IS COALESCING
属性来解决问题(我也更喜欢XMLStreamReader
而不是XMLEventReader
,但是ymmv):
顺便说一句,据我所知,没有一个JDK解析器能够在不阻塞的情况下处理“格式不好”的XML。事实上,您的XML格式很好:它使用一个实体而不是一个原始的符号。应该很好地解析节点,但您可能会得到多个表示“Boom”、“&;“和”Shroom“,这取决于实现。您需要能够处理它。感谢您的评论。确实,我得到了多个事件,但我只想得到一个代表完整字符串的事件。