[英]Is there a way to render JAVA components/containers in a HTML/XML fashion?
[英]More generic way to parse XML from Java in a streaming fashion?
我需要有效地解析可能非常大的XML文件(因此无法将整个文件放入内存中)。 因此,我研究了XMLStreamReader之类的流技术,但是这些技术看起来很底层,并且会产生非常硬的代码:
event = parser.next();
switch (event)
{
case XMLStreamConstants.START_ELEMENT:
elementName = parser.getLocalName();
if (elementName.equals("name")){
state = FOUND_A_NAME;
}else if (elementName.equals("address")){
state = FOUND_AN_ADDRESS;
}
ETC...
}
我正在寻找一种方法,而不将解析器与要解析的内容紧密耦合,此外,此代码感觉不对。 看来这应该更真正地面向事件。
有什么建议吗?
SAX的事件可以完全按照您的想法执行。.:) http://www.saxproject.org/quickstart.html演示了一个简单的代码库。 我想念什么吗?
如果您正在寻找用于以流模式处理XML的高级语言,并且不介意处于最新状态,请考虑Saxon-EE 9.3 XSLT中的流功能-XSLT 3.0草案的部分实现规格。
http://www.saxonica.com/documentation/sourcedocs/streaming.xml
这可以写成通用的。 例如,我有一个属性文件,该文件在xml元素名称和类字段名称/哈希映射键名称之间进行了映射。
if (event.isStartElement()) {
if (event.asStartElement().getName().getLocalPart().equals(XMLElementName)) {
event = eventReader.nextEvent();
fields.put(classFieldName, event.asCharacters().getData());
continue;
}
}
这有助于我们拥有一个解析器来解析不同的xml消息。 这只是一个想法..我们可以做更多..
我认为代码的紧密耦合本质与StAX无关,这只是您选择编写代码的方式。
您可以使用查找表(例如,将元素名称添加到处理程序对象)轻松地重构该代码,以将事件的处理委派给处理程序对象。 这种机制是完全通用和可重用的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.