groovy操作xml,获取属性值和标签值并修改

groovy操作xml,获取属性值和标签值,并将其修改

一、用groovy操作xml,修改xml的值

由于我操作的是plist文件,其中会有IOS的dtd对xml验证,解析的时候会报错,如下:

org.xml.sax.SAXParseException; systemId: file:///Users/guoyf/Desktop/Info.plist; lineNumber: 2; columnNumber: 10; 将功能 "http://apache.org/xml/features/disallow-doctype-decl" 设置为“真”时, 不允许使用 DOCTYPE。

解决方法参考:点击这里吧

话不多说,上代码

import groovy.xml.MarkupBuilder
import groovy.xml.XmlUtil
import groovy.xml.*
import java.io.*

class XmlWriter {
    public static main(def args){
    
        /*关闭解析器的验证,不去下载外部dtd文件来对xml进行验证
        
        */
        def parser = new XmlParser();
        parser.setFeature("http://apache.org/xml/features/disallow-doctype-decl",false);
        parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd",false);
        
        def file = new File("oa.plist");   
        def config = parser.parse(file);//解析xml文件
        
        //获取xml里面属性为version的值,version="1.0"
        def version = config.attributes().get("version");//1.0
        def dict = config.dict;

        config.attributes().put("version","123");//将属性值"1.0"改为"123"
        
        //打印属性为name的值,name="云办公呀呀呀"
        println config.attributes().get("name");//云办公呀呀呀
//        println "${config.attribute('version')}"
        println config.dict.array.dict.array.dict[0].string[1].text();//获取标签值并打印
        
        
        //修改标签值
        config.dict.array.dict.array.dict[0].string[1].value()[0] = "123456"
        
        
        
        
        def xmlFile = "configNewToString.xml";
        //用UTF-8写入,默认为GBK,不然会有乱码
        PrintWriter pw = new PrintWriter(xmlFile,("UTF-8"));
//        PrintWriter pw = new PrintWriter(xmlFile,("GBK"));
        pw.write(XmlUtil.serialize(config));//用XmlUtil.serialize方法,将String改为xml格式
        pw.close();
        
        
        }
    }

附上我要解析的plist源文件即oa.plist:





	items
	
		
			assets
			
				
					kind
					software-package
					url
					https://version.geshuinfo.cn:4444/sys/sysAttachment/download?pkid=65d2038e505a432da323f91f409e81ef
				
				
					kind
					display-image
					needs-shine
					
					url
					http://ming.pactera.com/mingwebApp/app/logo.5757.png
				
				
					kind
					full-size-image
					md5
					baae4e9499e9b29c2420ad8a002f33c2
					needs-shine
					
					url
					http://ming.pactera.com/mingwebApp/app/logo.512512.jpg
				
			
			metadata
			
				bundle-identifier
				com.chinazw.community
				bundle-version
				1.1.0
				kind
				software
				subtitle
				OA
				title
				OA
			
		
	

然后是通过PrintWriter写入的configNewToString.xml文件,其实这个你可以用和源文件同名的oa.plst这样就能覆盖源文件达到更新的标准了,我的生成文件如下:


  
    items
    
      
        assets
        
          
            kind
            software-package
            url
            123456
          
          
            kind
            display-image
            needs-shine
            
            url
            http://ming.pactera.com/mingwebApp/app/logo.5757.png
          
          
            kind
            full-size-image
            md5
            baae4e9499e9b29c2420ad8a002f33c2
            needs-shine
            
            url
            http://ming.pactera.com/mingwebApp/app/logo.512512.jpg
          
        
        metadata
        
          bundle-identifier
          com.chinazw.community
          bundle-version
          1.1.0
          kind
          software
          subtitle
          OA
          title
          OA
        
      
    
  

是不是觉得少了点啥?对的,就是少了

这个验证我们解析的时候被关闭了,你可以当做给删除了。是不是很恼火,正常的xml到此就可以结束了,可是IOS的plist需要它来验证,这个时候你就不能用解析xml的方法来改值了,下面我提供一个操作文件的方法来改值

二、操作文件来改值

代码不多,要改的地方按你的需求用正则来写就可以了,代码如下:

//原始文件
def filePath = "oa.plist"
def file = new File(filePath)

//临时文件
def tempFilePath = "oa1.plist"
def tempFile = new File(tempFilePath)
//以"UTF-8"来写入,不然有汉字乱码的问题,默认为GBK
def out = tempFile.newPrintWriter("UTF-8")


def lineNum = 1
def newLine = ""

file.eachLine ("UTF-8"){

    if (lineNum>2){
        //前两行不做处理,只处理后面的内容
        it = it.replace("version=\"1.0\"","version=\"2.0\"")
    }

    //写入
    out.println(it);
    lineNum++
}

//完成写入
out.flush()
out.close()

以上就我是用来修改xml值的方法,android小白,有大神话还望指教!!!!!!!!!!

你可能感兴趣的:(groovy,groovy,xml)