import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class BaseXMLData implements IData {
String defaultPath = "data/";
public static final String CASETYPE = "case";
int rowSize;
int dataSize;
public Object[][] getData(String caseName, String dataFile) {
return getData(caseName, dataFile, 0);
}
public Object[][] getData(String caseName, String dataFile, int rowNum) {
Object[][] data = addList(caseName, dataFile, rowNum);
return data;
}
private Object[][] addList(String caseName, String dataFile, int rowNum) {
ArrayList<Object> list = new ArrayList<Object>();
NodeList caseList = getNodeList(caseName, dataFile);
String type;
if (caseList != null) {
for (int i = 0; i < caseList.getLength(); i++) {
Node caseNode = caseList.item(i);
if (caseNode.getNodeType() == Node.ELEMENT_NODE) {
if (caseNode.getNodeName() == CASETYPE) {
String cName = caseNode.getAttributes()
.getNamedItem("name").getNodeValue();
if (cName.equals(caseName)) {
for (Node n = caseNode.getFirstChild(); n != null; n = n
.getNextSibling()) {
if (n.getNodeType() == Node.ELEMENT_NODE) {
if (n.getNodeName().equals("row")) {
rowSize++;
dataSize = 0;
for (Node m = n.getFirstChild(); m != null; m = m
.getNextSibling()) {
if (m.getNodeName().equals("data")) {
dataSize++;
Node typevalue = m
.getAttributes()
.getNamedItem("type");
if (typevalue != null) {
type = m.getAttributes()
.getNamedItem(
"type")
.getNodeValue();
if (type.equalsIgnoreCase("String")) {
String s = m
.getAttributes()
.getNamedItem(
"value")
.getNodeValue();
list.add(s);
} else if (type
.equalsIgnoreCase("array")) {
String s = m
.getAttributes()
.getNamedItem(
"value")
.getNodeValue();
String[] ss = s
.split(",");
list.add(ss);
}
} else {
String s = m
.getAttributes()
.getNamedItem(
"value")
.getNodeValue();
list.add(s);
}
}
}
}
}
}
}
}
}
}
}
Object[][] data = new Object[rowSize][dataSize];
if (rowNum <= 0 || rowNum >= rowSize) {
int k = -1;
for (int i = 0; i < rowSize; i++) {
for (int j = 0; j < dataSize; j++) {
if (k < list.size())
k++;
data[i][j] = list.get(k);
}
}
} else {
int k = -1;
data = new Object[rowNum][dataSize];
for (int i = 0; i < rowNum; i++) {
for (int j = 0; j < dataSize; j++) {
if (k < list.size())
k++;
if (i <= (rowNum - 1)) {
data[i][j] = list.get(k);
}
}
}
}
return data;
}
private NodeList getNodeList(String caseName, String dataFile) {
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder dombuilder = domfac.newDocumentBuilder();
InputStream is = new FileInputStream(defaultPath + dataFile);
Document doc = dombuilder.parse(is);
Element cases = doc.getDocumentElement();
NodeList caseList = cases.getChildNodes();
return caseList;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
<?xml version="1.0" encoding="utf-8"?>
<cases>
<case name="caigoupifa">
<row>
<data key="secondClassic" type="String" value="食品" />
<data key="secondClassicCode" type="String" value="8537" />
</row>
</case>
</cases>
public static Object[][] getData()
{
return new BaseXMLData().getData("caigoupifa","data.xml");
}