新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论DOM, SAX, XPath等。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DOM/SAX/XPath 』 → jdom里怎么用getChild()得到有NS前缀的自元素 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6529 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: jdom里怎么用getChild()得到有NS前缀的自元素 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     jay1910 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:11
      积分:86
      门派:XML.ORG.CN
      注册:2006/6/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jay1910发送一个短消息 把jay1910加入好友 查看jay1910的个人资料 搜索jay1910在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jay1910的博客楼主
    发贴心情 jdom里怎么用getChild()得到有NS前缀的自元素

    Element类里有个getChild()方法,当子元素有NS前缀该怎么用
    <wsdl:a>
       <wsdl:input>**********</ wsdl:a>
    </ wsdl:a>

    已知<wsdl:a>元素为a,下面的方法好象都不对,怎样才可以啊
    a.getChild("input"); (返回NULL)

    a.getChild("wsdl:input");(返回NULL)

    a.getChild("input","wsdl");(这个报错,如下)
    E:\XML\jdomExamples\translate.java:30: 找不到符号
    符号: 方法 getChild(java.lang.String,java.lang.String)
    位置: 类 org.jdom.Element
                            Element in_input = operation.getChild("input","wsdl");

    JDOM的API里有:
    getChild
    public Element getChild(java.lang.String name,
                            Namespace ns)This returns the first child element within this element with the given local name and belonging to the given namespace. If no elements exist for the specified name and namespace, null is returned.
    Parameters:
    name - local name of child element to match
    ns - Namespace to search within
    Returns:
    the first matching child element, or null if not found
    为什么最后一个不行啊!


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/8/17 11:42:00
     
     jay1910 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:11
      积分:86
      门派:XML.ORG.CN
      注册:2006/6/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jay1910发送一个短消息 把jay1910加入好友 查看jay1910的个人资料 搜索jay1910在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jay1910的博客2
    发贴心情 
    问题已经找到(转)
    JDOM的bug?

    今天试着把java download的项目的输入输出文件改为xml格式,从网上找了一些资料,好像jdom比较简单,而且比较符合java标准,所以选用了jdom

    但是现在碰到了一个问题,我需要用element的名称和namespace来匹配一个element,但是却无法匹配!

    我的xml文件是这样写的:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    <site xmlns:site="www.iyi.cn">
      <host>www.iyi.cn</host>
      <root>iyi</root>
      <depth>2</depth>
    </site>
    </root>

    我在java中这样写:

    SAXBuilder builder = new SAXBuilder();
    document = builder.build(xmlFile);
    rootElement = document.getRootElement();
    namespace = rootElement.getChild("site").getNamespace("iyi");
    System.out.println(namespace);
    element = rootElement.getChild("site",namespace);
    程序的第四行和第五行可以正确的获得namespace,并打印出来[Namespace: prefix "iyi" is mapped to URI "www.iyi.cn"]

    但是第6行却无法匹配element!如果去掉后面的namespace就可以匹配,但是我的xml会有许多site,所以需要至少两个标签批来匹配。

    按照JDOM document中的说法应该可以匹配才对。2005.1.8 22:30:52

    ================================================

    刚才看了jdom的源代码,果然有问题!

        public Element getChild(String name, Namespace ns) {
         ElementFilter filter = new ElementFilter(name, ns);
         List elements = content.getView(filter);
            Iterator i = elements.iterator();
            if (i.hasNext()) {
                return (Element) i.next();
            }
            return null;
        }
    s

    s

    s

        public boolean matches(Object obj) {
            if (obj instanceof Element) {
                Element el = (Element) obj;
                return
                  (this.name == null || this.name.equals(el.getName())) &&
                  (this.namespace == null || this.namespace.equals(el.getNamespace()));
            }
            return false;
        }


    上面是它比较element的函数,关键就在el.getNamespace()    getNameSpace()函数如下:

        public Namespace getNamespace() {
            return namespace;
        }

    这里return namespace是当前element的namespace 23:20:58

    -_-看的晕头转向,不过还是找到了一点问题,上面这个getNamespace()返回的永远是空!同样还有getNamespacePrifix()...

    果然我在网上找到了一篇文章:http://www.jdom.org/pipermail/jdom-interest/2002-April/009568.html

    居然是2002年4月份的,bug到现在还没有更正。奇怪的是我从cvs上获得的文档是2004年12月11号的!不知道他们在干什么。

    晕倒,看看这些错误:http://www.jdom.org/pipermail/jdom-interest/

    难道都没有更正?看来选择jdom是个错误!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/8/17 16:01:00
     
     wang_x_ke 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:11
      积分:123
      门派:XML.ORG.CN
      注册:2006/8/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给wang_x_ke发送一个短消息 把wang_x_ke加入好友 查看wang_x_ke的个人资料 搜索wang_x_ke在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看wang_x_ke的博客3
    发贴心情 
    不错
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/8/25 16:14:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DOM/SAX/XPath 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/7/16 23:10:42

    本主题贴数3,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms