drach 发表于 2007-11-30 19:19

求助,想了一天,不知道怎么用dom4j读取多个同名子节点

假设XML文档节点如下
<A>
<B>
   <C>
         <D>
      </D>
   </C>
   </B>
<B>
   <C>
         <D>
      </D>
   </C>
</B>
</A>
我现在可以读取root A节点下的B中内容,但怎么才能读取每个D节点中的内容呢,我用遍历也只能读取第一各B中的节点D内容,每个B节点都一样,没有属性,其余D节点内容该如何读取,谢谢了

康猪 发表于 2007-11-30 22:39

dom4j.org应该有很多例子吧。

对dom,jdom,dom4j不熟悉。

很久以前看过一篇关于dom的文章,好像dom是在内存中建parse的数,比较占内存?

实在不行试试用sax。

大镖客 发表于 2007-12-1 00:54

不明白楼主为什么要用遍历

DOM相对于SAX的好处就在于树状结构,可以通过element的名字直接取节点值,不用遍历下来那么麻烦

NodeList tagliste = docu.getElementsByTagName("D");

for(int i=0;i<tagliste.getLength();i++){
      Node node = tagliste.item(i);
..........

renzaijianghu 发表于 2007-12-1 19:54

随便翻了下dom4j 网上的例子"Powerful Navigation with XPath"
List list = document.selectNodes( "//foo/bar" );
似乎就能满足需求啊,应该可以找到所有的B/C/D

另外感觉 apache 的digester很多情况下也是不错的,直接从xml生成相关的java object.

康猪 发表于 2007-12-1 22:58

回复 #4 renzaijianghu 的帖子

digester不错的东东!在做web app的时候经常用来初始化bean。

但是,

对普遍的xml处理,digester局限了。

drach 发表于 2007-12-2 13:37

原帖由 renzaijianghu 于 2007-12-1 18:54 发表 http://www.dolc.de/forum/images/common/back.gif
随便翻了下dom4j 网上的例子"Powerful Navigation with XPath"
List list = document.selectNodes( "//foo/bar" );
似乎就能满足需求啊,应该可以找到所有的B/C/D

另外感觉 apache 的digester很多情况下也是 ...

我i用过这个命令,但不知道为什么读出来的都是第一个B下的所有D节点,再往下就读不了了

drach 发表于 2007-12-4 10:54

问题解决了$汗$ 谢谢楼上各位
               
               List list = doc.selectNodes("/scpd/actionList/action");
         
               List list2 = doc.selectNodes("/scpd/actionList/action/argumentList/argument");
            
            // Node root3 = doc.selectSingleNode("/scpd/actionList");

            
               Iterator iter=list.iterator();
               Iterator iter2=list2.iterator();
            
            while (iter.hasNext())
               {
                Element element=(Element)iter.next();
               
               System.out.println(element.element("name").getText()+"\t");

            
               
                  
               while(iter2.hasNext())
               {
               Element element2=(Element)iter2.next();
            
                System.out.println(element2.element("name").getText());
                System.out.println(element2.element("direction").getText());
                System.out.println(element2.element("relatedStateVariable").getText());
            
               
               }
页: [1]
查看完整版本: 求助,想了一天,不知道怎么用dom4j读取多个同名子节点