我尝试了下面的代码从xml文件中获取特定的整个标记值
xml结构:
<?xml version="1.0" encoding="UTF-8"?>
<test-result>
<test-method status="PASS" name="beforeTestSetup" is-config="true" duration-ms="705" started-at="2018-08-16T21:39:59Z" finished-at="2018-08-16T21:39:59Z">
<params>
<param index="0">
<value> <![CDATA[org.testng.TestRunner@31c2affc]]> </value>
</param>
</params>
</test-method>
<test-method status="FAIL" name="beforeTestSetup" is-config="true" duration-ms="805" started-at="2018-08-16T21:39:59Z" finished-at="2018-08-16T21:39:59Z">
<params>
<param index="0">
<value> <![CDATA[org.testng.TestRunner@31c2affc]]> </value>
</param>
</params>
</test-method>
<test-method status="PASS" name="TEST" is-config="true" duration-ms="905" started-at="2018-08-16T21:39:59Z" finished-at="2018-08-16T21:39:59Z">
<params>
<param index="0">
<value> <![CDATA[org.testng.TestRunner@31c2affc]]> </value>
</param>
</params>
</test-method>
</test-result>
代码:
docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
is = new InputSource();
is.setCharacterStream(new StringReader(content));
doc = docBuilder.parse(is);
NodeList rootElement = doc.getElementsByTagName("test-method");
for (int i = 0; i < rootElement.getLength(); i++)
{
Element element=(Element)rootElement.item(i);
if(element.getAttribute("status").equals("PASS"))
{
System.out.println(element.getTextContent());
}
}
上述代码未按预期工作。
我只想得到test method status=“pass”并跳过这个负载中剩下的内容。预期产量如下:
预期输出(它应该获得整个标记及其值):
<test-method status="PASS" name="beforeTestSetup" is-config="true" duration-ms="705" started-at="2018-08-16T21:39:59Z" finished-at="2018-08-16T21:39:59Z">
<params>
<param index="0">
<value> <![CDATA[org.testng.TestRunner@31c2affc]]> </value>
</param>
</params>
</test-method>
<test-method status="PASS" name="TEST" is-config="true" duration-ms="905" started-at="2018-08-16T21:39:59Z" finished-at="2018-08-16T21:39:59Z">
<params>
<param index="0">
<value> <![CDATA[org.testng.TestRunner@31c2affc]]> </value>
</param>
</params>
</test-method>
上述结果应跳过“失败”状态的结果。
有人帮我解决这个问题吗
2条答案
按热度按时间qojgxg4l1#
您好,请通过替换
与
c3frrgcw2#
对于这种情况,请考虑改用xslt。带有标识转换的xslt样式表以及对选定元素的特殊处理将非常有效。
第一个模板匹配所有类型的节点,创建节点的副本,然后递归地将模板应用于子节点。
第二个模板将匹配
test-method
具有名为status
有价值的FAIL
. 由于此模板不执行任何操作,因此test-method
元素和所有子节点将被过滤掉。下面是一个完整的示例: