前端之家收集整理的这篇文章主要介绍了
Guzz源码分析(二) guzz解析guzz.xml,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
301_0@1. 在
上一篇文章分析了guzz初始化的大体流程,这里继续分析,主要分析在initFromMainConfig的
方法中解析guzz.xml的过程
@H_
301_0@2. 首先在initFromMainConfig中找到下面的
代码:
GuzzConfigFileBuilder builder = GuzzConfigFileBuilder.build(this,config,"UTF-8") ;
if(log.isInfoEnabled()){
log.info("Loading guzz config file:" + config) ;
}
这里出现了一个类GuzzConfigFileBuilder,这也是一个重要的类,后面也会使用到,这里只看build
方法,传入了config(就是guzz.xml)
文件,一路跟踪找到:
protected void setupMainConfigDocument(GuzzContext gf,Resource r,String encoding) throws DocumentException,IOException,SAXException{
rootDoc = loadFullConfigFile(r,encoding).getRootElement() ;
this.mainConfigResource = r ;
}
出现了loadFullConfigFile
方法,返回了一个guzz.xml的document对象.
@H_
301_0@3. 跟踪进入到loadFullConfigFile
方法中:使用了dom4j的SAXReader来解析的guzz.xml,
final Element root = document.getRootElement();
List list = document.selectNodes("//import");
获取到根节点,寻找import节点,把找的到import放入到list中,然后进入for循环
for(int i = 0 ; i < list.size() ; i++){
Element n = (Element ) list.get(i) ;
String file = n.attribute("resource").getValue() ;
//load included xml file.
FileResource fr = new FileResource(resource,file) ;
Document includedDoc = null ;
try{
includedDoc = loadFullConfigFile(fr,encoding) ;
}finally{
CloseUtil.close(fr) ;
}
List content = root.content() ;
int indexOfPos = content.indexOf(n) ;
content.remove(indexOfPos) ;
//appends included docs
Element ie = includedDoc.getRootElement() ;
List ie_children = ie.content() ;
for(int k = ie_children.size() - 1 ; k >=0 ; k--){
content.add(indexOfPos,ie_children.get(k)) ;
}
}
有出现了loadFullConfigFile
方法,也就是递归的解析了使用import导入进来的
文件,然后把
文件加入到document后面,最好返回整个xml文档对象,保存到了rootDoc
@H_
301_0@4. 到此guzz完成guzz.xml
文件的解析
原文链接:https://www.f2er.com/xml/299290.html