读取 XML 文件时发生 ClassCastException

发布于 2024-09-03 11:42:33 字数 814 浏览 12 评论 0原文

我有以下 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安人多梦 2024-09-10 11:42:33

第一个子元素是 c1 末尾和 c2 开头之间的空白。

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

List children = c1.elements();

or 来按名称进行限制

List children = c1.elements("c2");

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

List children = c1.elements();

or, to restrict by name

List children = c1.elements("c2");
烙印 2024-09-10 11:42:33

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

The first child of c1 is a text node containing the newline. You need to iterate the children skipping text nodes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文