gpt4 book ai didi

java - 使用 java 从复杂的 XML 中读取值

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:24 25 4
gpt4 key购买 nike

我正在尝试使用 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"}

我希望另一个键值也位于字符串中。任何人都可以帮助并修复我的代码

最佳答案

您正在使用

testcase.getChild("parameter")

getChild() 返回具有给定名称的第一个子元素。您希望所有子项都命名为“parameter”。所以你需要打电话

testcase.getChildren("parameter")

并迭代所有返回的元素。

关于java - 使用 java 从复杂的 XML 中读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20186561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com