Groovy Process Xml(解析XML)
code_money_guji
posted @ 2011年3月06日 08:40
in Groovy
, 3193 阅读
参考资料:
http://groovy.codehaus.org/Processing+XML 官方Groovy xml 操作
测试的xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<books location="theLocation">
<book bookid="1" mark="4">Java in action</book>
<book bookid="2" mark="3">Groovy in action</book>
<book bookid="3" mark="2">JavaScript in action</book>
<book bookid="4">
<position url="http://">
<property name="propertiName1">Hello</property>
<property name="propertiName2">World</property>
</position>
</book>
</books>
解析XML示例1:
def books = new XmlParser().parse("testXml.xml"); //参见groovy.util.XmlParser类的api
println langs.attributes().get("location");
//下面的语句更加具有"魅力",因为book是xml中的一个Element,Groovy能够很清楚的知道它是一个Node.
books.book.each {
def bookid = it.attributes().get("bookid");
println bookid;
}
解析XML示例二: 使用数组的下标直接定位;
def books = new XmlParser().parse("testXml.xml");
def bookCollection = books.book;
def book = bookCollection[0];
assert book.text() == "Java in action";
assert book.'@bookid' == "1";
解析XML示例三: 解析示例xml中Position
def file = new XmlParser().parse("testXml.xml");
def books = file.book;
def specialBook = books[3];
assert specialBook.'@bookid' == "4";
def properties = specialBook.position[0].property; //获取position的值;
properties.each {
println "-------------------"
println it.'@name';
println it.text();
println "-------------------"
}
解析XML示例四: 挑选合适的集合并使用排序的方式:
xmlFile.book.findAll { it.attributes().keySet().contains("mark"); //先找到含有"mark"的标签, 因为有一个book是没有这个属性的, //为了避免有些操作会抛出NullPointException. }.sort{ it.'@mark'.toInteger(); //排序的依据 }.each { println it.'@bookid'; }
结束语: 在groovy的文档中,还有很多的方便的解析方式, 这里只是使用了XmlParser这个类来解析.其他的方式可参考Groovy文档,很齐全!