我正在尝试使用JAVA读取XML文件。 XML文件: - <
<?xml version="1.0" encoding="UTF-8"?>
<document>
<testCaseDataName>
<id>1</id >
<testCaseName>EditTest</testCaseName >
<expectedResult>true</expectedResult >
</testCaseDataName>
<testCaseDataName>
<id>2</id >
<testCaseName>AddTest</testCaseName >
<expectedResult>true</expectedResult>
<parameter>
<key>featues</key >
<value>new</value>
</parameter>
</testCaseDataName>
<testCaseDataName>
<id>3</id >
<testCaseName>AddTest</testCaseName >
<expectedResult>true</expectedResult>
<parameter>
<key>projectType</key >
<value>old</value>
</parameter>
<parameter>
<key>Name</key >
<value>Marvel</value>
</parameter>
<parameter>
<key>status</key >
<value>ACTIVE</value>
</parameter>
<parameter>
<key>canOrder</key >
<value>Yes</value>
</parameter>
</testCaseDataName>
<testCaseDataName>
<id>4</id >
<testCaseName>AddTest</testCaseName >
<expectedResult>empty</expectedResult>
<parameter>
<key>projectType</key >
<value>GEN</value>
</parameter>
<parameter>
<key>Name</key >
<value>HPM</value>
</parameter>
<key>no status</key >
<value>ACTIVE</value>
<parameter>
<key>canOrder</key >
<value>Yes</value>
</parameter>
</testCaseDataName>
</document>
我正在尝试从参数中读取键和值到hashmap。我的代码是: -
public class JDOM {
public static void main(String[] args) throws JDOMException, IOException {
// TODO Auto-generated method stub
File xsdfile = new File("file.xsd");
XMLReaderJDOMFactory schemafac = new XMLReaderXSDFactory(xsdfile);
SAXBuilder builder = new SAXBuilder(schemafac);
//Document doc = new SAXBuilder().build(new File("testdbcsv/ACL.xml"));
Document doc = builder.build(new File("file.xml"));
Element root = doc.getRootElement();
for (Element testcase : root.getChildren()) {
String id = testcase.getChildText("id");
String testCaseName = testcase.getChildText("testCaseName");
String expectedResult = testcase.getChildText("expectedResult");
System.out.println(expectedResult);
HashMap<String,String> parameters = new LinkedHashMap<String,String>();
Element params = testcase.getChild("parameter");
System.out.println(params);
if (params != null ) {
Iterator<Element> it = params.getChildren().iterator();
while (it.hasNext()) {
Element key = it.next();
Element val = it.next();
parameters.put(key.getValue(), val.getValue());
}
}
parameters.put("expectedResult", expectedResult);
ObjectMapper obj = new ObjectMapper();
String jsonString = obj.writeValueAsString(parameters);
System.out.println(jsonString);
}
}
}
我的代码只读取第一组键和值,而不是读取其他键和值。 输出是: -
{"expectedResult":"true"}
{"featues":"w,f","expectedResult":"true"}
{"projectType":"MEMOGEN","expectedResult":"true"}
{"projectType":"MEMOGEN","expectedResult":"empty"}
我希望其他键值也在字符串中。任何人都可以帮助并修复我的代码
答案 0 :(得分:1)
你正在使用
testcase.getChild("parameter")
getChild()
返回具有给定名称的第一个子元素。你想要所有名为“参数”的孩子。所以你需要打电话
testcase.getChildren("parameter")
并遍历所有返回的元素。
答案 1 :(得分:0)
使用Xpath这将帮助您从xml中读取许多复杂的表达式。
写一个xslt,它将把你的xml作为输入并渲染你的json。 Xslt也支持if循环。这也是时间有效的。我在100毫秒内解析了一个大小为3 MB的xml(我在xslt中执行了数百次操作)
答案 2 :(得分:0)
List<Element> params = testcase.getChildren("parameter");
for(Element ele : params){
String key = ele.getChildText("key");
String value = ele.getChildText("value");
parameters.put(key, value);
}
我认为这将解决我的问题。