2009年1月8日木曜日

JavaFX PullParser (data.pull)

JavaFX で XML をパースしてみる

javafx.data.pull.PullParser は XML と JSON は最初からサポートされている

ここ がわかりやすかった

こんな XML をパースすると
More...
sandwich.xml
  1. <!--xml version="1.0" encoding="UTF-8"?-->  
  2.    
  3. <bread sesame="true">  
  4.    <catchup>  
  5.    <hamburguer>  
  6.    <cheese type="chedar">  
  7.    <maionese>  
  8.    <lettuce>  
  9. </lettuce></maionese></cheese></hamburguer></catchup></bread>  



  1. import java.io.FileInputStream;  
  2. import javafx.data.pull.Event;  
  3. import javafx.data.pull.PullParser;  
  4. import javafx.ext.swing.SwingList;  
  5. import javafx.ext.swing.SwingListItem;  
  6. import javafx.scene.Scene;  
  7. import javafx.stage.Stage;  
  8.    
  9. var list = SwingList { width: 600 height: 300 }  
  10.    
  11. var myparser = PullParser {  
  12.    documentType: PullParser.XML;  
  13.    onEvent: function (e: Event) {  
  14.       var item = SwingListItem {  
  15.          text: "event {e}"  
  16.       };  
  17.       insert item into list.items;  
  18.    }  
  19.    input: new FileInputStream("/tmp/sandwich.xml");  
  20. }  
  21. myparser.parse();  
  22.    
  23. Stage {  
  24.    title: "XML Sandwich"  
  25.    scene: Scene { content: list }  
  26. }  


e : Event の中身がリストになって出力される
結果は ここ

Event の要素は data.pull.Event に定義されている

variables
type : Integer current Event type
typeName : String current Event name
level : Integer depth of Node
qname : QName name of XML element
text : String XML text

variable of QName (javafx.data.xml.QName)
name : String
namespaces : String

functions
getAttributeValue(qname : QName) : String



type はこんな感じで使う
if(e.type == PullParser.START_ELEMENT){
...
}

variables of PullParser
START_DOCUMENT : Integer (=7)
END_DOCUMENT : Integer (=8)
START_ELEMENT : Integer (=1)
END_ELEMENT : Integer (=2)
TEXT : Integer (=4)


qname はこんな感じで使う
if(e.qname.name.equals("bread")){
...
}

xml が
<cheese type="chedar"/>
のようになっているとき、 getAttributeValue で type の値を得る

if(e.qname.name.equals("cheese")){
var cheesetype = e.getAttributeValue(QName{name:"type"});
// cheesetype = "chedar" になる
....
}

0 件のコメント:

コメントを投稿