1

我有以下 xml 文件:

<?xml version="1.0" encoding="UTF-8"?>  
<c1>
 <c2 id="0001" n="CM" urlget="/at/CsM" urle="/E/login.jsp">
 </c2>
 <c2 id="0002" n="C2M" urlget="/a2t/CsM" urle="/E2/login.jsp">
 </c2>
</c1> 

我正在尝试以这种方式加载 c2 的属性:

Document d =
 DocumentBuilderFactory.newInstance()
 .newDocumentBuilder()
 .parse("epxy.xml");
Element  c1 = d.getDocumentElement();
Element c2 = (Element)c1.getFirstChild();
while (c2 != null) {
  ...         
  c2 = (Element)c2.getNextSibling();
}

但是我在行中得到异常java.lang.ClassCastException: org.apache.xerces.dom.DeferredTextImpl incompatible with org.w3c.dom.Element

Element c2 = (Element)c1.getFirstChild();

在循环之前。

有什么提示吗?谢谢。

4

2 回答 2

5

第一个孩子是 c1 的结尾和 c2 的开头之间的空白。

使用 w3c DOM 遍历树并不是那么容易。如果您不必使用 w3c,我推荐使用dom4j - 使用起来要好得多。例如,它将从元素中过滤文本节点,因此您可以调用

List children = c1.elements();

或者,按名称限制

List children = c1.elements("c2");
于 2010-05-25T00:56:30.497 回答
1

c1 的第一个子节点是一个包含换行符的文本节点。您需要迭代跳过文本节点的孩子。

于 2010-05-25T00:53:31.260 回答