我想使用JAVA连接xml文件中的多个标记值。 .xml看起来像这样:
<test>
<testcase>
<teststep> row 1 </teststep>
<teststep> row 2 </teststep>
<teststep> row 3 </teststep>
<title> Frist Test </title>
</testcase>
</test>
<test>
<testcase>
<teststep> row 20 </teststep>
<teststep> row 10 </teststep>
<teststep> row 30 </teststep>
<title> Second Test </title>
</testcase>
</test>
结果应该是这样的:
row 1 row 2 row 3
row 10 row 20 row 30
应该有2个变量。
我试过了:
NodeList nodeList5 = doc.getElementsByTagName("teststep");
for (int x = 0, size = nodeList5.getLength(); x < size; x++) {
description = description + nodeList5.item(x).getTextContent();
}
System.out.println("Test Description: " + description);
但我所拥有的只是:第1行第2行第3行第10行第20行第30行,只有一个变量。
答案 0 :(得分:0)
您可以先选择testcase
个节点,然后选择其中的所有子节点teststep
来提取所需的数据
NodeList testcases = doc.getElementsByTagName("testcase");
for(int i = 0; i < testcases.getLength(); ++i) {
Node testcase = testcases.item(i);
NodeList teststeps = testcase.getChildNodes();
for (int j = 0; j < teststeps.getLength(); ++j) {
if(teststeps.item(j).getNodeName().equals("teststep"))
System.out.print(teststeps.item(j).getTextContent());
}
System.out.println();
}
答案 1 :(得分:0)
SimpleXml可以做到:
final String data = ...
final SimpleXml simple = new SimpleXml();
final CheckedIterator<Element> it = simple.iterateDom(new ByteArrayInputStream(data.getBytes(UTF_8)));
while (it.hasNext()) {
System.out.println(String.join(" ", selectTestStep(it.next().children.get(0).children)));
}
private static List<String> selectTestStep(final List<Element> elements) {
final List<String> list = new ArrayList<>();
for (final Element e : elements)
if (e.name.equals("teststep"))
list.add(e.text);
return list;
}
将输出:
row 1 row 2 row 3
row 20 row 10 row 30
从Maven Central:
<dependency>
<groupId>com.github.codemonstur</groupId>
<artifactId>simplexml</artifactId>
<version>1.4.0</version>
</dependency>