2011-05-31 63 views
0

getChild()時,我有XML文檔的下一個樣品,我需要分離從文件空引用返回執行使用JDOM

<?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>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" /> 

請幫

非常感謝 大衛

+0

我不太瞭解jDom,但是你重複什麼樣的數據?如果這是rdf:RDF根的孩子,則atom10:link是這些元素的一部分,所以它不能作爲這些元素的子元素。 – PhiLho 2011-05-31 13:12:08

回答

0

如果你想刪除與本地名稱的所有元素「鏈接「,無論名稱空間如何,最簡單的解決方案是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();