«前の日記(2005-12-04) 最新 次の日記(2005-12-06)» 編集

ASIPの徒然なるままに備忘録

[home-page:放置中]  
2005年
12月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
[最近のツッコミ]
2002|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|
[全文検索]
☆基本的に個人的なリンク集、偶に思い出したように文章を綴る日記。
☆JAVA・Ruby・RELAX NGネタ中心です。O:原文,P:ポップアップ辞書,t:和訳
☆[category]:カテゴリフィルタ画面
☆[blogger]:Blogger出張所。徒然。
☆[kuro]:個人的ライブラリ開発プロジェクト「Kuro Project」サイト。
☆[kuro-pj]Kuro Project開発日誌。
☆[ruby]Ruby学習日誌。
☆[vox]:VOX出張所。

2005-12-05 [長年日記]

_ [java.xb][kuro.nova]StAX、使ってみた。[日記]

 ElementタグとComponentタグをそれぞれ別々に解析してます。
 これでStAXによるXMLファイルのデータ構造への落とし込みは技術的にOK。
 #XML定義ファイルのスキーマは設計中...。

#Tester.java
/** 
 * 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>

_ [jboss]JBoss、WS-TS&CAF実装ArujunaTSを来春、オープンソース化(on off)

 メモメモφ。/* from ネバーバード日記(on off) and MYCOM(on off) */
 -->WEBサービストランザクション(on off)

_ [java.apserv]Geronimoアプリケーション・サーバーでのトランザクション(on off)

 メモメモφ。

_ [java.ajax]Using Ajax with Java Technology(on off)

 メモメモφ。/* from ネバーバード日記(on off) */

_ [java.design]クラシックJ2EEアーキテクチャーからの脱却(on off)

 メモメモφ。/* from オレンジニュース */

_ [ruby][svn]Collaboa(on off)

 Ruby製Tracもどき。開発中(現バージョンは0.5)。利用例はこちら(on off)
 /* from momonga-dev.ja ML:03255 */

_ [php]Sooey - brace 0.2.0(on off)

 メモメモφ。

_ [soft]Apache 2.2.0 + mod_proxy_balancer(on off)

 メモメモφ。

_ [soft]Apache 2.2.0 のロードバランス機能(mod_proxy_balancer)を使いこなす(on off)

 メモメモφ。/* from オレンジニュース */

_ [js.tech]Prototype.jsの入門記事「Quick Guide to Prototype」(on off)

 メモメモφ。/* from オレンジニュース */

_ [js.tech]Makeを利用したJavaScriptファイルの結合・圧縮(on off)

 メモメモφ。/* from オレンジニュース */

_ [study] naoyaのはてなダイアリー -直交する技術から複数のものを学ぶ(on off)

 メモメモφ。

_ [study]奈良先端大、講義ビデオのPodcast配信を開始(on off)

 メモメモφ。/* from オレンジニュース */

_ [web.design]セキュリティレベルの高いサイトを構築する 22 カ条(on off)

 メモメモφ。/* from オレンジニュース */

_ [web.design]XSS (Cross Site Scripting) Cheat sheet(on off)

 メモメモφ。/* from オレンジニュース */

_ [soft]Xen 3.0、リリース(on off)

 メモメモφ。/* to CNET(on off) and /.J(on off) */

_ [moz]「Firefox」のフォームで入力履歴の個別削除や自動補完の抑止を行うプラグイン(on off)

 メモメモφ。

_ [web.spot]RSSをまとめて表示してくれる新サービス「MixFeed」(on off)

 メモメモφ。/* from CNET(on off) AND Intermezzo(on off) */

_ [elec.pc]いくつもの難題を抱えて船出するViivテクノロジ(on off)

 メモメモφ。

_ [elec.home]ゲームシーンに合わせて部屋全体で臨場感! 新技術「amBX」が来年デビュー (on off)

 メモメモφ。

_ [elec.hard]メモリースティックはなくなるの?(on off)

 メモメモφ。

_ [science]量子バイトを実現――量子コンピューティングへの大きな一歩(on off)

 メモメモφ。

_ [elec.net]Bluetoothの設定手順は統一すべき(on off)

 メモメモφ。

_ [mail]マイクロソフトの新技術「SNARF」--人間関係を手がかりにメールを分類(on off)

 メモメモφ。

_ [java.fw]StrutsにXSSのセキュリティホール(Tomcat上では問題なし?)(on off)

 メモメモφ。/* from オレンジニュース */


«前の日記(2005-12-04) 最新 次の日記(2005-12-06)» 編集
[kuro][vox][category][home-page:放置中]