|
[最近のツッコミ] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| [全文検索] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ☆基本的に個人的なリンク集、偶に思い出したように文章を綴る日記。 ☆JAVA・Ruby・RELAX NGネタ中心です。O:原文,P:ポップアップ辞書,t:和訳 ☆[category]:カテゴリフィルタ画面 ☆[blogger]:Blogger出張所。徒然。 ☆[kuro]:個人的ライブラリ開発プロジェクト「Kuro Project」サイト。 ☆[kuro-pj]Kuro Project開発日誌。 ☆[ruby]Ruby学習日誌。 ☆[vox]:VOX出張所。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/**
* Created by IntelliJ IDEA.
* User: Yasumasa Ashida
* Date: 2005/12/03
* Time: 17:55:56
*/
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.events.XMLEvent;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.EndElement;
import javax.xml.namespace.QName;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class Tester {
private static final String fileName = "test.xml";
private static final String ELEMENT = "element";
private static final String ELEMENT_ID = "id";
private static final String ATTR = "attribute";
private static final String ATTR_NAME = "name";
private static final String ATTR_VALUE = "value";
private static final String COMPONENT = "component";
public static void main(String[] args){
// 入力ファクトリを取得する
XMLInputFactory xmlif = XMLInputFactory.newInstance();
try{
BufferedInputStream stream = new BufferedInputStream(new FileInputStream(fileName));
XMLEventReader reader = xmlif.createXMLEventReader(stream);
while(reader.hasNext()){
XMLEvent e = reader.nextEvent();
analyzeElement(e,reader);
analyzeComponent(e,reader);
}
reader.close();
}catch(XMLStreamException e){
e.printStackTrace();
}catch(FileNotFoundException e){
e.printStackTrace();
}
}
private static void analyzeElement(XMLEvent e,XMLEventReader reader) throws XMLStreamException{
if(e.isStartElement()){
StartElement se = (StartElement)e;
if(se.getName().getLocalPart().equals(ELEMENT)){
Attribute attr = se.getAttributeByName(new QName(ELEMENT_ID));
System.out.println(attr.getValue());
analyzeAttributes(e,reader);
}
}
}
private static void analyzeComponent(XMLEvent e,XMLEventReader reader) throws XMLStreamException{
if(e.isStartElement()){
StartElement se = (StartElement)e;
if(se.getName().getLocalPart().equals(COMPONENT)){
System.out.println(se.getName().getLocalPart());
analyzeElements(e,reader);
}
}
}
private static void analyzeAttributes(XMLEvent e,XMLEventReader reader) throws XMLStreamException{
boolean next_flg = false;
while(reader.hasNext() && !next_flg ){
e = reader.nextEvent();
if(e.isStartElement()){
StartElement se = (StartElement)e;
if(se.getName().getLocalPart().equals(ATTR)){
Attribute attr = se.getAttributeByName(new QName(ATTR_NAME));
System.out.print(attr.getValue() + ":");
attr = se.getAttributeByName(new QName(ATTR_VALUE));
System.out.println(attr.getValue());
}else{
next_flg = true;
}
}else if(e.isEndElement()){
EndElement ee = (EndElement)e;
if(!ee.getName().getLocalPart().equals(ATTR)){
next_flg = true;
}
}
}
}
private static void analyzeElements(XMLEvent e,XMLEventReader reader) throws XMLStreamException{
boolean next_flg = false;
while(reader.hasNext() && !next_flg ){
e = reader.nextEvent();
if(e.isStartElement()){
analyzeElement(e,reader);
}else if(e.isEndElement()){
EndElement ee = (EndElement)e;
if(!ee.getName().getLocalPart().equals(ELEMENT) && !ee.getName().getLocalPart().equals(ATTR)){
next_flg = true;
}
}
}
}
}
#test.xml<?xml version="1.0" encoding="Windows-31J" ?>
<test>
<element id="pepe" >
<attribute name="test" value="pc"/>
<attribute name="test" value="pc"/>
</element>
<elementid="popo" >
<attribute name="test" value="pc"/>
</element>
<component>
<elementid="pepe" >
<attribute name="test"value="pc"/>
<attribute name="test" value="pc"/>
</element>
<element id="popo" >
<attribute name="test" value="pc"/>
</element>
</component>
</test>
メモメモφ。/* from ネバーバード日記(on off) and MYCOM(on off) */
-->WEBサービストランザクション(on off)
メモメモφ。
メモメモφ。/* from オレンジニュース */
Ruby製Tracもどき。開発中(現バージョンは0.5)。利用例はこちら(on off)。
/* from momonga-dev.ja ML:03255 */
メモメモφ。/* from オレンジニュース */
メモメモφ。/* from オレンジニュース */