【问题标题】:How to parse XML in java to save values in db using STAX?java - 如何在java中解析XML以使用STAX将值保存在db中?
【发布时间】:2016-09-12 10:44:41
【问题描述】:

我是 JAVA STAX 解析器的新手,我必须解析一个 xml 来填充我的数据库表。

在尝试使用 STAX 读取 XML 文件时,我遇到了这个问题。 在一个 XML 文件中,我可能在不同的根节点中有同名的子节点。我不太清楚如何从根节点读取特定的子节点。

XML 文件示例:-

<?xml version="1.0" encoding="UTF-8"?>
<DOC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XML.xsd">
<FMTR>
<TITLEPG>
  <TITLENUM>Title 1</TITLENUM>
  <SUBJECT>Test 1</SUBJECT>
</TITLEPG>
<BTITLE>
  <P></P>      
</BTITLE>
<TOC>
  <EXPL>
    <SUBJECT>Explanation</SUBJECT>
  </EXPL>
  <TITLENO>
    <CHAPTI>
      <SUBJECT>Chapter I—Test 1</SUBJECT>
    </CHAPTI>
  </TITLENO>
  <FAIDS>
    <SUBJECT>Table of Titles and Chapters</SUBJECT>
    <SUBJECT>Alphabetical List</SUBJECT>
  </FAIDS>
</TOC>
</FMTR>
</DOC>  

例如:- 我必须阅读 TITLEPG 根标签的 SUBJECT 标签并相应地填充数据库表。

我们可以使用 STAX 获取根节点的子节点吗?

解析它的最佳方法是什么:STAX 或 JDOM

【问题讨论】:

  • 你有没有研究过如何使用XPath?
  • 你完全改变了你的问题?

标签: java xml stax jdom


【解决方案1】:

Java StAX 中的XMLEventReader 类是一个基于迭代器的API,用于读取XML 文件。它将让您在 XML 中从一个事件移动到另一个事件,从而允许您决定何时移动到下一个事件。

您正在这里寻找“事件”。请记住 Stax 和 xpath 是非常不同的东西。 Stax 仅允许您向前解析流式 XML 文档。

您可以通过 javax.xml.stream.XMLInputFactory 类创建 XMLEventReader。尝试运行演示代码(根据需要进行更改),您可以看到您想要的对象。

XMLInputFactory factory = XMLInputFactory.newInstance();

//get Reader connected to XML input from somewhere..
Reader reader = getXmlReader();

try {

    XMLEventReader eventReader =
    factory.createXMLEventReader(reader);

} catch (XMLStreamException e) {
    e.printStackTrace();
}

现在使用这个 eventReader 来获得你想要的东西......迭代它,在调试模式下查看,

while(eventReader.hasNext()){
   // this is what you want...
    XMLEvent event = eventReader.nextEvent();

    if(event.getEventType() == XMLStreamConstants.START_ELEMENT){
        StartElement startElement = event.asStartElement();
        System.out.println(startElement.getName().getLocalPart());
    }
    //handle more event types here...
}

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2015-12-29
    • 2016-10-30
    • 1970-01-01
    相关资源
    最近更新 更多