我有下一个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" />
请帮忙
非常感谢 大卫
答案 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();