import org.xml.sax.SAXException;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.IOException;
public class ParseXml {
public static void main(String[] args) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("src/languages.xml");
//print the "type" attribute
Element langs = doc.getDocumentElement();
System.out.println("type = " + langs.getAttribute("type"));
//print the "language" elements
NodeList list = langs.getElementsByTagName("language");
for(int i = 0 ; i < list.getLength();i++) {
Element language = (Element) list.item(i);
System.out.println(language.getTextContent());
}
}catch(ParserConfigurationException pce) {
pce.printStackTrace();
}catch(SAXException se) {
se.printStackTrace();
}catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
我不針對上面抄來的程式做修正了,反正大約都是一層的xml簡單文件而已。下面是 Groovy 的寫法:
def roots = new XmlParser().parse("D:\\test.xml")
roots.star.each{
println "age="+it.attribute("age") +" " + it.text()
}
處理的是這份文件
<root>
<star age='22' blood='A'>布萊德彼特1</star>
<star age='26' blood='C'>小勞勃道尼</star>
<star age='24' blood='B'>基努李維</star>
</root>
你應該已經知道 it 是預設的,如果你的閉包參數只有一個,那麼it 就是指這個物件。
唯一要注意的就是,如果要取 tag 裡的文字是用 text(),要取參數就是 it.attribute("名稱")。( 取參數也可以用 it.@age ,如果你開始習慣之後,就可以改成Groovy提供的做法。 )
roots.star.each 這種語法或許 Java 的程序員還不是很習慣,但其實jQuery 裡也大量使用這種觀念啊。
$("#talbe1 tr)".each({
});
是否你覺得似曾相識呢? 我把它換行一下。
$("#talbe1 tr)".each( {這裡就是一個活生生的閉包啊} );
再注意一次相同性,都是把閉包 { } 丟到方法each 中做參數。 在這裡閉包就像是一個沒名字的方法。
你還是有一點意見對吧…
roots.star.each{
println "age="+it.attribute("age") +" " + it.text()
}
你說明明就有一點不同,和jQuery不同啊,少了圓括號與最後的分號。
那我們改一下再來跑一次。
roots.star.each({
println "age=" + it.@age +" " + it.text()
});
我連分號都加了,這樣你沒話說了吧,還是可以跑啊。 why!!為何在Groovy 不用加 ( ) 呢? 這是Groovy 提供的一種簡潔式的寫法。好啦,我直接整理給你看三種不同寫法,都可以跑。
roots.star.each({
});
roots.star.each(){
};
roots.star.each{
};
這三種都是一樣的意思。我很快的總結一下- 真正的寫法是如此,閉包是each的參數。
- 為了好看,閉包可以放在each()的後面,因為它太長了嘛!
- 如果each只收一個閉包做為參數,那 ( ) 就可以省了,它是2 的再精簡寫法。
再感覺一下… Groovy 是不是沒那麼奇怪了呢? 是不是常覺得…如果jQuery的寫法可以用在 Java 多好? 如果有這種感覺的話,你才是真的是個程序員!
沒有留言:
張貼留言