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 に答える