java xml将节点转换为Element

我知道这次被问过多次,但我仍然无法让它发挥作用。 我将xml字符串转换为Document对象,然后解析它。 这是代码:

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.*; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; try { builder = factory.newDocumentBuilder(); Document document = builder.parse( new InputSource( new StringReader( result ) ) ); Node head = document.getFirstChild(); if(head != null) { NodeList airportList = head.getChildNodes(); for(int i=0; i<airportList.getLength(); i++) { Node n = airportList.item(i); Element airportElem = (Element)n; } } catch (Exception e) { e.printStackTrace(); } 

当我将Node对象n转换为Element时,我得到一个exceptionjava.lang.ClassCastException:org.apache.harmony.xml.dom.TextImpl不能转换为org.w3c.dom.Element。 当我检查Node对象的节点类型时,它表示Node.TEXT_NODE。 我相信它应该是Node.ELEMENT_NODE。 我对吗?

那么我如何将Node转换为Element,所以我可以执行像element.getAttribute(“attrName”)这样的操作。

这是我的XML:

    Abu Dhabi AUH   Amsterdam AMS   Antalya AYT   Bangkok BKK   

提前致谢!

当我将Node对象n转换为Element时,我得到一个exceptionjava.lang.ClassCastException:org.apache.harmony.xml.dom.TextImpl不能转换为org.w3c.dom.Element。 当我检查Node对象的节点类型时,它表示Node.TEXT_NODE。 我相信它应该是Node.ELEMENT_NODE。 我对吗?

可能不是,解析器可能是正确的。 这意味着您正在解析的一些节点文本节点 。 例如:

 bar 

在上面,我们有一个包含文本节点的foo元素。 (文本节点包含文本"bar" 。)

同样,考虑:

  baz  

如果你的XML文档看起来像上面那样,它包含一个带有这些子节点的根元素foo (按顺序):

  • 一个文本节点,里面有一些空格
  • 一个bar元素
  • 一个文本节点,其中有一些更多的空格

请注意, bar元素不是foo的第一个子元素。 如果它看起来像这样:

 baz 

那么 bar元素将是foo的第一个孩子。

我想你需要这样的东西:

 NodeList airportList = head.getChildNodes(); for (int i = 0; i < airportList.getLength(); i++) { Node n = airportList.item(i); if (n.getNodeType() == Node.ELEMENT_NODE) { Element elem = (Element) n; } } 

你也可以试着“保护”你的演员阵容

 Node n = airportList.item(i); if (n instanceof Element) { Element airportElem = (Element)n; // ... } 

但正如其他人所指出的那样,你有文本节点,那些不会被这种方法投入,请确保你不需要它们使用条件来使用不同的代码来处理它们