我有一个类似这样的XML:
<ListOfErrors>
<Error>
<ErrorCode>1</ErrorCode>
<Severity>Critical</Severity>
</Error>
<Error>
<ErrorCode>15414</ErrorCode>
<Severity>Non-Critical</Severity>
</Error>
</ListOfErrors>
我正在尝试,通过接收错误代码,我可以检索错误下的其他值。例如,我收到错误1,并且我知道严重性。
我这样做:
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("file.xml"));
String xPathExpression = "//Error[ErrorCode=1]";
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList) xpath.evaluate(xPathExpression,
document, XPathConstants.NODESET);
System.out.println(nodes.getLength());
Element firstElement = (Element)nodes.item(0);
System.out.println("Severity"+firstElement.getAttribute("Severity"));
我知道它不起作用,但我不知道我缺少什么,xPathExpression工作正常,因为如果我只将其保留为//错误并且我打印nodes.getlength然后我得到所有错误类型。 有什么帮助吗?
答案 0 :(得分:2)
您正在使用ErrorCode = 1检索Error节点,但该节点没有属性,因此firstElement.getAttribute(“Severity”)将不会检索任何内容。
Severity实际上是Error的子节点,而不是属性。要获取该值,您需要循环遍历子节点(firstElement.getChildNodes())或更改XPath以直接获取Severity(“// Error [ErrorCode = 1] / Severity”)