2013年1月2日水曜日

StAX でXMLを読んでみる

XMLをパースする機会があったのでメモしとこっと。


------------------XMLをパースするコード------------------

package jp.co.kani;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

public class Test20130102 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ

XMLInputFactory factory = XMLInputFactory.newInstance();

XMLEventReader reader = null;
BufferedInputStream stream = null;

try {
stream = new BufferedInputStream(new FileInputStream("test.xml"));
reader = factory.createXMLEventReader(stream);

while(reader.hasNext()){
XMLEvent event = reader.nextEvent();

if(event.isStartElement()){
// if(event.isStartElement() && event.asStartElement().getName().getLocalPart().equals("Hoge")){

StartElement element = (StartElement)event;
System.out.println("name S:"+element.getName());

String tagName = element.getName().getLocalPart();
System.out.println("name S(tagName):"+tagName);
// String key = element.getAttributeByName(new QName("key")).getValue();

// XMLEvent event1 = reader.nextEvent();
// if(event1.isStartElement()){
// StartElement element1 = (StartElement)event;
// System.out.println("name S:"+element1.getName());
// }

}else if(event.isEndElement()){
// }else if(event.isEndElement() && event.asEndElement().getName().getLocalPart().equals("Hoge")){
EndElement elem = event.asEndElement();

String tagName = elem.getName().getLocalPart();

if(tagName.equals("pro") || tagName.equals("pros") || tagName.equals("item")){
System.out.println("name E:"+ elem.getName());
}

}
}

} catch (FileNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (XMLStreamException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}

}

}

------------------XML------------------
<pro><pros>
  <item>
  </item>
 </pros>
 <pros>
  <item>
  </item>
 </pros>
</pro>




参考にしたのはココです。