在JavaBean中,怎样用循环方法得到XML各节点值。

java_xml_java 2005-03-30 09:01:01
XML文件:
<?xml version="1.0" encoding="gb2312"?>
<book>
<id>001</id>
<name>xx</name>
<remark>yy</remark>
</book>

在Delphi中,我是这样做的:
var
Root:IXMLNode;Parent_Node:IXMLNode;
begin
XmlDoc.Active := True;
Root := XmlDoc.DocumentElement; //XML文件的根结点,即"<book>"
Parent_Node:=Root.ChildNodes.First;
while Parent_Node<> nil) do
begin
showmessage(Parent_Node.NodeValue); //这样循环显示出001、xx、yy
Parent_Node := Parent_Node.NextSibling;
end;
end;
------------------------------------------------------------------------------
请问:在javabean中怎做的,要用循环方法。
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("D:/AA.xml"));
Element rootElement = document.getDocumentElement();

... //在这怎写??要用循环方法!

}
catch (Exception e){}
谢谢高手帮忙。
...全文
148 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
java_xml_java 2005-03-30
killme2008(流浪的蛤蟆)大哥:
可以了。
不过仍有点疑问:
NodeList list=document.getElementsByTagName("*"); //* 是代表所有的元素名
那么,若我的XML为
<?xml version="1.0" encoding="gb2312"?>
<book>
<aa>
<i>001</i>
<b>002</b>
<m>003</m>
</aa>
<id>001</id>
<name>xx</name>
<remark>yy</remark>
</book>
若我要得到<aa>中<b>的值(002),NodeList list=document.getElementsByTagName("*")怎写?
回复
jianghuxing 2005-03-30
NodeList的getLength()方法
回复
java_xml_java 2005-03-30
killme2008(流浪的蛤蟆)大哥:
我先得到某个值
NodeList list=document.getElementsByTagName("*");
Node node1 = list.item(2);
String id=node1.getNodeValue();
这样得到:name

如果是:
NodeList list=document.getElementsByTagName("*");
Node node1 = list.item(2);
String id=node1.getNodeValue(); ------此改了
这样得到:系统报错!说NullPointerException
回复
killme2008 2005-03-30
sorry


NodeList list=document.getElementsByTagName("*"); //* 是代表所有的元素名
for (int i = 0; i < list.getLength(); i++) { //你可以用具体的元素名,如"id"
Node node = list.item(i);
.............
}
回复
java_xml_java 2005-03-30
to killme2008(流浪的蛤蟆)
针对我那个XML
NodeList node=document.getElementsByTagName("*"); -------*是什么?
for (int i = 0; i < list.getLength(); i++) { -------list是什么?
Node node = list.item(i);
.............
}
回复
daimojingdeyu 2005-03-30
留心看看
回复
killme2008 2005-03-30
晕,那是dom了
NodeList node=document.getElementsByTagName("*");
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
.............
}

我没记错的话应该是这样
一直是用jdom的,不好意思
回复
java_xml_java 2005-03-30
to killme2008(流浪的蛤蟆)
不行哦。
在我的,ArrayList ls = root.getChildren(); //没有这个getChildren()
我用到的类
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.w3c.dom.Node;
import java.util.ArrayList;
回复
killme2008 2005-03-30
我是直接COPY过来的,你把for循环里的改成你想要的就行了
回复
killme2008 2005-03-30
try {
doc = builder.build(in);
Element root = doc.getRootElement();
List ls = root.getChildren();//注意此处取出的是root节点下面的一层的Element集合
for (Iterator iter = ls.iterator(); iter.hasNext(); ) {
Element el = (Element) iter.next();
if(el.getName().equals("to")){
System.out.println(el.getText());
}
}
}
catch (IOException ex) {
ex.printStackTrace();
}
catch (JDOMException ex) {
ex.printStackTrace();
}

楼主使用的是jdom吧?
回复
killme2008 2005-03-30
那样你必须判断node的类型,如果还有子节点就继续展开,你去网上搜索下dom的资料,很多的
回复
java_xml_java 2005-03-30
大家帮帮忙。
回复
发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2005-03-30 09:01
社区公告
暂无公告