您的位置:首页 > 编程语言 > Java开发

Dom4j解析XML文件,处理来至XML的数据信息

2016-06-09 00:39 399 查看
XML文件

<?xml version="1.0" encoding="UTF-8"?>

<datasets name="ds1">

<locators name="LoginSetMet">

<locator name="loginLocator" by="id">login</locator>

<locator name="pwdLocator" by="name">tl_password</locator>

<locator name="submitLocator" by="xpath">//input[@name='login_submit']

</locator>

</locators>

</datasets>


使用Dom4j进行解析

package com.auto.demo1;

import java.io.InputStream;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

/**
* dom4j java XML开源解析工具包
*
* @author Monica
*
*/
public class LocatorPaser {
private Document doc;// 定义Document文档对象
// 默认的构造方法中完成对XML文件的解析

public LocatorPaser(){
InputStream in = getInputFileAsStream(this.getClass());
SAXReader reader = new SAXReader();//得到解析器
try{
doc = reader.read(in);//解析文档
}catch(DocumentException e){
e.printStackTrace();
}
}

private InputStream getInputFileAsStream(Class<? extends LocatorPaser> testClass) {
// TODO Auto-generated method stub
String packageName = "";
if(testClass.getPackage()!=null){
packageName = testClass.getPackage().getName() + ".";
}
String resourceBase = (packageName + testClass.getSimpleName()).replace('.', '/');
//得到当前类的完整路径
String resourceName;
ClassLoader classLoader = testClass.getClassLoader();
resourceName = resourceBase + ".xml";
//XML文件与当前类同名,且在同一目录下
System.out.println("Searching for default input file:"+resourceName);
return classLoader.getResourceAsStream(resourceName);
//返回同名XML文件资源的获取
}
public String getLocator(String name){
String locator = null;
//查找到"datasets"标签
Element datasets = (Element) this.doc.selectSingleNode("//datasets");
//开始定位串解析
for(Iterator d = datasets.elementIterator("locators");d.hasNext();){
Element data = (Element)d.next();
for(Iterator e = data.elementIterator("locator");e.hasNext();){
Element elem = (Element)e.next();
System.out.println(elem);
//获取当前结点的值
String value = elem.valueOf(".");
System.out.println(value);
//获取name属性值
String nameString = elem.valueOf("@name");
System.out.println("\n'"+nameString+"'");
if(name.equalsIgnoreCase(nameString)){
if(!elem.valueOf("@by").isEmpty()){
locator = elem.valueOf("@by")+"="+value;//将by属性值与当前节点值进行拼接,如”xpath=//input[@name='login_submit']"
}
break;//完成解析,跳出循环
}

}
}
return locator;//返回定位串或者null
}
@Test
public void testPaser(){
String locator = "loginLocator";
long curTime = System.currentTimeMillis();
String resultString = this.getLocator(locator);
long delta = System.currentTimeMillis()-curTime;
System.out.println("\n"+locator+"='"+resultString+"'\nTime used(ms)::"+delta);
}

}


运行结果:

单元测试通过!

控制台输出:

Searching for default input file:com/auto/demo1/LocatorPaser.xml
org.dom4j.tree.DefaultElement@77f03bb1 [Element: <locator attributes: [org.dom4j.tree.DefaultAttribute@233c0b17 [Attribute: name name value "loginLocator"], org.dom4j.tree.DefaultAttribute@63d4e2ba [Attribute: name by value "id"]]/>]
login

'loginLocator'

loginLocator='id=login'
Time used(ms)::34
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml dom4j 解析XML java