使用JDOM执行getChild()时返回空引用

时间:2011-05-31 12:35:24

标签: jdom

我有下一个XML文档样本,我需要从文档中分离所有“链接”元素

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
<channel>
  <title>Slashdot</title> 
  <link>http://slashdot.org/</link> 
  <description>News for nerds, stuff that matters</description> 
  </channel>
<image>
  <title>Slashdot</title> 
  <url>http://a.fsdn.com/sd/topics/topicslashdot.gif</url> 
  <link>http://slashdot.org/</link> 
  </image>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/xml" href="http://rss.slashdot.org/Slashdot/slashdot/to" /> 
  </rdf:RDF>

这是我正在使用的代码

while (iterator.hasNext()) {
    Object next = iterator.next();
    Element element = (Element) next; 
    Namespace namespace = element.getNamespace();
    Element link = element.getChild("link",namespace);
    link.detach();
}

它在没有属性的“link”元素上运行良好

<link>http://slashdot.org/</link>
<link>http://slashdot.org/</link>

但是当我想获得一个也是链接的下一个子节点,但是具有属性和不同的命名空间时,返回空对象引用

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/xml" href="http://rss.slashdot.org/Slashdot/slashdot/to" /> 

请帮忙

非常感谢 大卫

1 个答案:

答案 0 :(得分:0)

如果要删除所有具有本地名称“link”的元素,无论命名空间如何,最简单的解决方案是XPath。表达式//*[local-name() = 'link]将选择文档中本地名称为“link”的所有元素节点。

    SAXBuilder builder = new SAXBuilder();
    Document doc = builder.build(...));
    List<Element> result = XPath.selectNodes(doc, "//*[local-name() = 'link']");
    for (Element e : result)
        e.detach();