Java 不使用映射器类读取XML
我需要一些帮助。解析Java 不使用映射器类读取XML,java,xml,xml-parsing,jaxb,Java,Xml,Xml Parsing,Jaxb,我需要一些帮助。解析xml文件。目前,我们正在使用JAXB将XML文件解封送到Javapojo。我们已经使用“xjc”从xsd创建了mapperPOJO,自创建以来一直没有改变。但是我们预测,xml的结构将经常改变。因此,我们正在考虑寻找JAXB以外的选项,因为我们无法在xml模式更改时创建映射器pojo。我们尝试了一些解析器,比如DOM,SAX,但是性能不如JAXB 我们正在寻找, 动态处理不同结构的xml文件,而无需预定义/创建Java映射器类 模式验证是可选的。即使模式验证失败,我们也希望
xml
文件。目前,我们正在使用JAXB
将XML文件解封送到Javapojo
。我们已经使用“xjc”从xsd
创建了mapperPOJO
,自创建以来一直没有改变。但是我们预测,xml
的结构将经常改变。因此,我们正在考虑寻找JAXB
以外的选项,因为我们无法在xml
模式更改时创建映射器pojo
。我们尝试了一些解析器,比如DOM
,SAX
,但是性能不如JAXB
我们正在寻找,
DOMParser
在处理这些文件时遇到性能问题publicstaticvoidmain(字符串[]args)抛出SAXException、IOException、,
ParserConfiguration异常,TransformerException{
DocumentBuilderFactory docBuilderFactory=DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder=docBuilderFactory.newDocumentBuilder();
documentdocument=docBuilder.parse(新文件(“Document.xml”);
NodeList NodeList=document.getElementsByTagName(“*”);
for(int i=0;i
这可能对你有帮助。这已经在中得到了回答,jaxb在下面使用了一个解析器,比如dom,或者sax(或者可能是stax),所以我希望jaxb至少比stax的sax慢。@MeBigFatGuy好的。性能问题可能出现在我使用
SAXParser
的自定义事件处理程序上。我在那里使用reflection
api来生成动态对象。请确保使用缓冲流/readerJAXB,考虑到它必须做的事情,它的速度惊人地快,但是如果模式频繁更改,它是一个糟糕的解决方案,这是对的。在通用对象模型(DOM、JDOM、DOM4J、AXIOM等)中,我最喜欢的是XOM。请不要使用“巨大”这样的词。对一些人来说,巨大意味着100Mb,对另一些人来说,它意味着100Gb。我们是工程师,我们喜欢数字。
public static void main(String[] args) throws SAXException, IOException,
ParserConfigurationException, TransformerException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File("document.xml"));
NodeList nodeList = document.getElementsByTagName("*");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
// do something with the current element
System.out.println(node.getNodeName());
}
}
}