从Java中获取XML节点无法正常工作

时间:2014-12-04 17:21:35

标签: java xml

我有一个类似这样的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然后我得到所有错误类型。 有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

您正在使用ErrorCode = 1检索Error节点,但该节点没有属性,因此firstElement.getAttribute(“Severity”)将不会检索任何内容。

Severity实际上是Error的子节点,而不是属性。要获取该值,您需要循环遍历子节点(firstElement.getChildNodes())或更改XPath以直接获取Severity(“// Error [ErrorCode = 1] / Severity”)