代码之家  ›  专栏  ›  技术社区  ›  xain

ClassCastException读取XML文件

  •  1
  • xain  · 技术社区  · 15 年前

    我有以下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();
    

    在循环之前。

    有什么暗示吗?谢谢。

    2 回复  |  直到 14 年前
        1
  •  5
  •   mdma    15 年前

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

    使用W3C DOM在树上行走并不容易。如果你不必使用W3C,我建议 dom4j -用起来更好。例如,它将从元素中过滤文本节点,因此您可以调用

    List children = c1.elements();
    

    或者,按名称限制

    List children = c1.elements("c2");
    
        2
  •  1
  •   bmargulies    15 年前

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