我正在寻找使用 Java 来解析远程设备生成的事件驱动 XML 的持续流。这是两个事件的简化示例:
<?xml version="1.0"?>
<Event> DeviceEventMsg
<Param1>SomeParmValue</Param1>
</Event>
<?xml version="1.0"?>
<Event> DeviceEventMsg
<Param1>SomeParmValue</Param1>
</Event>
看起来 SAX 比 DOM 更适合这个,因为它是一个持续的流,尽管我对 Sax 不太熟悉。不要因为 XML 的结构而对我大喊大叫——我已经知道并且无法更改它。
是的,设备确实在每个事件之前发送 xml 指令。我的第一个问题是第二个 xml 处理指令正在破坏 SAX 解析器。
任何人都可以建议一种方法来解决这个问题吗?
到目前为止,我正在使用的第二个 xml 处理指令的代码是:
public class TestMe extends HandlerBase {
public void startDocument () throws SAXException
{
System.out.println("got startDocument");
}
public void endDocument () throws SAXException
{
System.out.println("got endDocument");
}
public void startElement (String name, AttributeList attrs) throws SAXException
{
System.out.println("got startElement");
}
public void endElement (String name) throws SAXException
{
System.out.println("got endElement");
}
public void characters (char buf [], int offset, int len) throws SAXException
{
System.out.println("found characters");
}
public void processingInstruction (String target, String data) throws SAXException
{
System.out.println("got processingInstruction");
}
public static void main(String[] args) {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = factory.newSAXParser();
// using a file as test input for now
saxParser.parse( new File("devmodule.xml"), new TestMe() );
} catch (Throwable err) {
err.printStackTrace ();
}
}
}