读取 XML 文件时发生 ClassCastException
我有以下 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 与 org.w3c.dom.Element 不兼容 行中
Element c2 = (Element)c1.getFirstChild();
在循环之前的
。有什么提示吗?谢谢。
I have the following xml file:
<?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>
I'm trying to load c2's attributes this way:
Document d =
DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse("epxy.xml");
Element c1 = d.getDocumentElement();
Element c2 = (Element)c1.getFirstChild();
while (c2 != null) {
...
c2 = (Element)c2.getNextSibling();
}
But I get the exception java.lang.ClassCastException: org.apache.xerces.dom.DeferredTextImpl incompatible with org.w3c.dom.Element
in the line
Element c2 = (Element)c1.getFirstChild();
before the loop.
Any hints ? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
第一个子元素是 c1 末尾和 c2 开头之间的空白。
使用 w3c DOM 来遍历树并不那么容易。如果您不必使用 w3c,我推荐 dom4j - 它更好用。例如,它将过滤元素中的文本节点,因此您可以调用
or 来按名称进行限制
The first child is the whitespace between the end of c1 and the start of c2.
Using w3c DOM to walk the tree is not so easy. If you don't have to use w3c, I recommend dom4j - it is much nicer to use. For example, it will filter text nodes from elements, so you can call
or, to restrict by name
c1 的第一个子节点是包含换行符的文本节点。您需要迭代跳过文本节点的子节点。
The first child of c1 is a text node containing the newline. You need to iterate the children skipping text nodes.