2016-09-12 1 views
1

Я новичок в JAVA STAX Parser, и мне нужно разобрать xml, чтобы заполнить таблицу базы данных.Как разбирать XML в java для сохранения значений в db с помощью STAX?

При попытке прочитать XML-файл с использованием STAX я столкнулся с этой проблемой. В 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 корневого тега и заполнить таблицу базы данных соответственно.

Можем ли мы получить дочерние узлы корневого узла с использованием STAX?

Каков наилучший подход к анализу: STAX или JDOM?

+0

Вы пытались исследовать, как использовать XPath? –

+0

Вы вообще изменили свой вопрос? –

+0

Состояние синтаксического анализа xml не является ни stax, ни jdom, это vtd-xml ... для обработки тяжелых транзакций он не имеет себе равных ... http://sdiwc.net/digital-library/web-admin/upload -PDF/00000466.pdf –

ответ

0

Класс XMLEventReader в Java StAX - это API на основе Iterator для чтения XML-файлов. Это позволит вам перейти от события к событию в XML, что позволит вам решить, когда перейти к следующему событию.

Здесь вы ищете «события». PLS иметь в виду, что Stax и xpath - это разные вещи. Stax позволяет анализировать потоковый XML-документ только в прямом направлении.

Вы можете создать XMLEventReader с помощью класса javax.xml.stream.XMLInputFactory. Попробуйте запустить демонстрационный код (внесите необходимые изменения), и вы можете увидеть нужный объект.

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... 
} 
Смежные вопросы