萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 2330|回复: 6

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

[复制链接]
发表于 2007-11-30 19:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
假设XML文档节点如下
<A>
  <B>
     <C>
         <D>
        </D>
     </C>
   </B>
<B>
     <C>
         <D>
        </D>
     </C>
</B>
</A>
我现在可以读取root A节点下的B中内容,但怎么才能读取每个D节点中的内容呢,我用遍历也只能读取第一各B中的节点D内容,每个B节点都一样,没有属性,其余D节点内容该如何读取,谢谢了
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-11-30 22:39 | 显示全部楼层
dom4j.org应该有很多例子吧。

对dom,jdom,dom4j不熟悉。

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

实在不行试试用sax。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 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);
..........
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-12-1 19:54 | 显示全部楼层
随便翻了下dom4j 网上的例子"Powerful Navigation with XPath"
List list = document.selectNodes( "//foo/bar" );
似乎就能满足需求啊,应该可以找到所有的B/C/D

另外感觉 apache 的digester很多情况下也是不错的,直接从xml生成相关的java object.
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-12-1 22:58 | 显示全部楼层

回复 #4 renzaijianghu 的帖子

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

但是,

对普遍的xml处理,digester局限了。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2007-12-2 13:37 | 显示全部楼层
原帖由 renzaijianghu 于 2007-12-1 18:54 发表
随便翻了下dom4j 网上的例子"Powerful Navigation with XPath"
List list = document.selectNodes( "//foo/bar" );
似乎就能满足需求啊,应该可以找到所有的B/C/D

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


我i用过这个命令,但不知道为什么读出来的都是第一个B下的所有D节点,再往下就读不了了
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 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());
              
               
               }
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-5-16 23:31 , Processed in 0.056604 second(s), 19 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表