2016-09-12 1 views
1

私はJAVA STAX Parserを初めて使用しています。データベーステーブルを作成するためにxmlを解析する必要があります。STAXを使用してdb内の値を保存するためにjavaで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

あなたはXPathを使用する方法を研究しようとしたことがありますか? –

+0

あなたの質問はすべて変更されましたか? –

+0

xml解析の状態はstaxでもjdomでもなく、vtd-xml ...重大なxml処理のためには、それは第2のものではありません... http://sdiwc.net/digital-library/web-admin/upload -pdf/00000466.pdf –

答えて

0

Java StAXのXMLEventReaderクラスは、XMLファイルを読み取るためのIteratorベースのAPIです。これにより、XMLのイベント間で移動することができ、次のイベントに移動するタイミングを決定できます。

ここでは「イベント」を探しています。 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... 
} 
関連する問題