2014-12-04 67 views
-1

我有了像这样的XML:获取某个节点从XML在Java中不工作

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

回答

2

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

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