code_money_guji's Blog

Happy coding

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文档,很齐全!

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter