【问题标题】:Reading XML without Mapper classes在没有 Mapper 类的情况下读取 XML
【发布时间】:2017-03-07 18:30:37
【问题描述】:

我需要一些帮助注册。解析xml 文件。目前,我们正在使用 JAXB 将 XML 文件解组为 Java POJOs。我们使用'xjc'从xsd创建了映射器POJOs,它从一开始就没有改变。但我们预测xml 的结构会经常发生变化。因此,我们正在考虑寻找JAXB 以外的选项,因为每当xml 架构发生更改时,我们都无法创建映射器POJOs。我们尝试了一些解析器,如DOMSAX,但性能不如JAXB

我们正在寻找,

  1. 动态处理不同结构的xml文件,无需预定义/创建Java映射器类
  2. 架构验证是可选的。即使模式验证失败,我们也希望将数据解析并持久化到可能的扩展范围
  3. 需要处理巨大的文件。 DOMParser 在处理这些文件时遇到了性能问题

【问题讨论】:

  • jaxb 在下面使用诸如 dom 或 sax(或者可能是 stax)之类的解析器,所以我希望 jaxb 至少比 sax 的 sax 慢。
  • @MeBigFatGuy 好的。性能问题可能在我的自定义event handlersSAXParser 上。我在那里使用reflection api 来生成动态对象。
  • 确保使用缓冲流/阅读器
  • JAXB 的速度出奇地快,因为它必须做的事情,但如果架构频繁更改,这是一个糟糕的解决方案,这是对的。在通用对象模型(DOM、JDOM、DOM4J、AXIOM 等)中,我最喜欢的是 XOM。
  • 请不要使用“巨大”之类的词。对于某些人来说,巨大意味着 100Mb,而对于其他人来说,这意味着 100Gb。我们是工程师,我们喜欢数字。

标签: java xml xml-parsing jaxb


【解决方案1】:
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());
        }
    }
}

这可能会对您有所帮助。 dynamically read xml element and value in java已经回答了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多