groovy脚本解析Xcode的info.plist文件

  最近的项目,需要用groovy脚本解析info.plist文件中的buildVersion。遇到一个问题报错为

  org.xml.sax.SAXParseException; systemId: file:///Users/guoyf/Desktop/Info.plist; lineNumber: 2; columnNumber: 10; 将功能 "http://apache.org/xml/features/disallow-doctype-decl" 设置为“真”时, 不允许使用 DOCTYPE。   
  
  网上查阅发现是因为下载doctype中的dtd对xml进行验证时,网络不通所致

解决方法有两种:
1)去掉info.plist中的
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">,显然这里是不可能的。

2)关闭解析器的验证,不去下载外部dtd文件来对xml进行验证

第二种方法需要添加的代码为

    parser=new XmlSlurper()

    parser.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false) 

    parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

 之后就可以拿解析器把plist文件当做XML解析了

 

    def customers = parser.parse(new File("文件路径/Info.plist"))

//拿到plist中的dict标签

    def dict = customers.dict;

//这里我比较取巧,因为plist文件跟XML不太一样,取到key的字符串时,找value的字符串不太好找,groovy解析两者关系不太大。

    String version = dict.string[7];//我的info.plist中版本号对应的是第8个string,所以就直接取值了

posted @ 2017-06-08 15:05  absty_guo  阅读(1070)  评论(0编辑  收藏  举报