我是JAVA STAX Parser的新手,我必须解析一个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 ?
答案 0 :(得分:0)
Java StAX中的XMLEventReader类是一个基于迭代器的API,用于读取XML文件。它将允许您从XML中的事件移动到事件,允许您决定何时移动到下一个事件。
您正在寻找&#34;事件&#34;这里。请记住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...
}