Java解析XML
2015-11-26 22:35 tao先生 阅读(540) 评论(0) 编辑 收藏 举报对于POM的Webdriver架构进行测试,页面元素的获取占去了绝大部分的代码量,如果将元素值放在代码中,是不易维护的,对于将来想转移到平台上面进行测试也是比较困难的,页面稍作改动都需要我们进行大量的排错,所以将元素和代码分离是很有必要的,我前面也说了几种数据分离的方式,CSV、Excel等等,如果用CSV来存取元素,会觉得眼前一片黑有点无从下手的感觉,如果用Excel来存取元素又有点大材小用的感觉,资源浪费太大了,想来想去还是XML比较合适,说到这自己都感觉有点牵强了,不就是要写个Java来解析XML吗?有必要说这个不好那个不好吗?有这个必要吗?哈哈,好吧,闲话也不多说了,代码走起。。。
PS:
有许多比较好用的解析XML文件的开源宝,比如JDOM、Dom4j 还有java源生的,这里用到了JDOM来进行XML文件的解析。
需要的Jar包:
jdom-2.0.5.jar
package com.util.datadriver; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.jdom2.Attribute; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; /** * 利用JDOM对XML进行创建析 Jar包: jdom-2.0.5.jar */ public class XMLController { //创建一个XML文件,传入一个根元素名称,以及一个List来保存子元素 public static void createXMLDom(String filePath, String fileName, String rootElement, List<Element> childElements) throws Exception { Element root = new Element(rootElement); Document document = new Document(root); //根据传进来子元素的数量来增加对应的子元素,具体参考main函数中的测试 for (int i = 0; i < childElements.size(); i++) { root.addContent(childElements.get(i)); } //定义XML个格式,以及写出XML文件 XMLOutputter out = new XMLOutputter(Format.getPrettyFormat()); out.output(document, new FileOutputStream(new File(filePath + "/" + fileName))); } //获得根元素节点元素 public static Element getRootElement(String file) throws Exception { SAXBuilder sb = new SAXBuilder(); Document document = sb.build(new FileInputStream(file)); Element rootElement = document.getRootElement(); // String rootName = rootElement.getName(); return rootElement; } // 代码稍微需要优化下,现在只能获取二级节点下面的元素值, // 主要是为执行自动化测试脚本获取页面元素,所以只获取到根元素下面节点的value public static List<String> getChildValue(String file, String elementName) throws Exception { Element rootElement = getRootElement(file); //获得根元素下面的子元素节点 Element element = rootElement.getChild(elementName); //获取子元素节点下所有孩子节点元素 List<Element> childLists = element.getChildren(); //定义一个list来存放子元素节点的Value List<String> childValList = new ArrayList<String>(); for (int i = 0; i < childLists.size(); i++) { String value = childLists.get(i).getText(); childValList.add(value); } return childValList; } public static void main(String[] args) throws Exception { List<Element> list = new ArrayList<Element>(); //定义两个子元素 Element e1 = new Element("student1") .setAttribute(new Attribute("color", "red")).setText("测试1") .addContent(new Element("姓名").setText("张三")) .addContent(new Element("成绩").setText("A")); Element e2 = new Element("student2") .setAttribute(new Attribute("color", "blue")).setText("测试2") .addContent(new Element("姓名").setText("李四")) .addContent(new Element("成绩").setText("AAA+")); list.add(e1); list.add(e2); createXMLDom("date", "xmlData.xml", "Student", list); List<String> list2 = getChildValue("date/xmlData.xml", "student1"); Iterator<String> ite = list2.iterator(); while (ite.hasNext()) { System.out.println(ite.next()); } } }
————————————————————————————————
WHOOOOSHHHHHHHHHHHH…………
Blimey what was that?
That was your life mate
Oh, I was not quite ready. Can I have another go?
Sorry mate, only one per person.