Java解析XML

对于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());

        }
    }
}
原文地址:https://www.cnblogs.com/taoSir/p/5106417.html