如何用dom4j找出多个同名的节点

梅小西Echo 2010-11-04 05:30:25
假设有一个xml,有很多节点,其中有个节点是student,属性是id,它下面有name和age的子节点,这个student节点不止一个,有很多个,而且分布在不同的地方,我怎样用dom4j搜索出所有的student,并且打印它id,name,age的值
...全文
932 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
loyo356852346 2013-04-17
  • 打赏
  • 举报
回复
不错 受教了!
梅小西Echo 2010-11-04
  • 打赏
  • 举报
回复
好了,做出来了

List<Element> list1 = document.selectNodes("//A/C");
for(Element n : list1)
{
//打印元素中属性为id的值
System.out.println("C id = "+ n.attribute("id").getText());
//循环得到其子元素
for(Iterator<Element> i = n.elements().iterator();i.hasNext();)
{
Element element = (Element)i.next();
//打印这个子元素的name和text
System.out.println(element.getName()+":"+element.getText());
}
System.out.println();
}
clariones 2010-11-04
  • 打赏
  • 举报
回复
用 xpath 就好了啊,直接一次拿到所有符合xpath模板的节点
梅小西Echo 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baiyu123 的回复:]
XML code

<?xml version="1.0" encoding="utf-8"?>
<a>
<b>1</b>
<c id="c2">
<c1>2</c1>
</c>
<c id="c3">
<c1>3</c1>
</c>
<c id="c4">
<c1>4</c1>
</c>

</a>




Java code

……
[/Quote]

万一c节点在某个节点的下面,而不是在根节点下面呢

<a>
<b>1</b>
<f>
<c id="c2">
<c1>2</c1>
</c>

<c id="c3">
<c1>3</c1>
</c>
<c id="c4">
<c1>4</c1>
</c>
<f/>
</a>



bf234511171 2010-11-04
  • 打赏
  • 举报
回复
虽然是同名的但是都是放在集合中可以对节点名称相同的进行迭代!
学习Java中 2010-11-04
  • 打赏
  • 举报
回复

<?xml version="1.0" encoding="utf-8"?>
<a>
<b>1</b>
<c id="c2">
<c1>2</c1>
</c>
<c id="c3">
<c1>3</c1>
</c>
<c id="c4">
<c1>4</c1>
</c>

</a>




public class Dom4j {

private SAXReader reader ;
private Document document;
private static String path = "c:/xml/dom4j/Dom4jSample.xml";


public Dom4j(String str) throws DocumentException {
reader = new SAXReader();
reader.setValidation(false);
document = reader.read(new File(str));

}

public void getInfo() {
Element root = document.getRootElement();

QName qname = new QName("c");
List<Element> list = root.elements(qname);

for(int i= 0;i<list.size();i++) {
Element e = list.get(i);
System.out.println(e.attribute("id").getText()); //属性
System.out.println(e.element("c1").getText());
}


public static void main(String[] args) throws DocumentException, IOException, ClassNotFoundException {

Dom4j test = new Dom4j(path);
test.getInfo();

}
}

好像只能找到同一层下的相同节点.

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧