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; // ... }
但正如其他人所指出的那样,你有文本节点,那些不会被这种方法投入,请确保你不需要它们使用条件来使用不同的代码来处理它们