关于JAVA XML的问题,请高手指教,在线等待!

netkill 2003-01-02 03:18:17
我刚学习XML不久,现在在利用JAVA来显示XML的内容时不能显示出其节点的值来,请高手指教,我怎么样才能在JSP中取得XML的节点的值来。
我的程序如下:(你可以不拘泥如我的程序,只要有指教就行,多谢了)

<%@page import="org.w3c.dom.*,DOMPrinter,java.util.*,javax.xml.parsers.*,java.io.*"%>
<html>
<body>
<%
try{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document document=db.parse(new File("addressbook.xml"));
Node node=document.getElementsByTagName("contact").item(0);
//其中contact 是根addressbook的子节点 
NodeList nodelist=node.getChildNodes();
for(int i=0;i<nodelist.getLength();i++){
out.println(i+" "+nodelist.item(i).getNodeName()+"'s value is "+nodelist.item(i).getNodeValue()+"<br>");
}
}catch(FactoryConfigurationError e){
out.println("error,could builder factory");
}

%>
</body>
</html>
得到的结果如下:
0 #text's value is
1 name's value is null
2 #text's value is
3 address's value is null
4 #text's value is
5 city's value is null
6 #text's value is
7 state's value is null
8 #text's value is
9 zip's value is null
10 #text's value is
11 phone's value is null
12 #text's value is
13 email's value is null
14 #text's value is
15 web's value is null
16 #text's value is
17 company's value is null
18 #text's value is


得到的结果中节点名可以取出,但值都为空,不知是什么原因,不知这样取值是不是合理,怎么样取最好呢?还有结果中#text是什么东西,怎么样来的,文件中没有这人内容呀?
...全文
71 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qlingw 2003-01-03
  • 打赏
  • 举报
回复
我建议你再看看jdom。它里面应该也是支持dtd的
netkill 2003-01-03
  • 打赏
  • 举报
回复
谢谢 qlingw(玲) ,我现在准备按你的意思试试看。
还希望有其它想法的人帮帮忙,也在这里一并谢过了!
qlingw 2003-01-02
  • 打赏
  • 举报
回复
import java.util.*;
import java.io.File;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.DOMBuilder;
import org.jdom.output.XMLOutputter;


public class TestXML{
public static void main (String[] args){
String path = "";
try{

// path = tools.getUAprofPath(filename);
//filename = path + filename ;
path = "E:\\technology\\test\\a.xml";
PrintXML printXML = new PrintXML();
printXML.getRoot(path);

}catch (Exception e) {
e.printStackTrace();
}
}
}

class PrintXML{

public void getRoot(String path){
try{
DOMBuilder builder = new DOMBuilder();
Document doc = builder.build(new File(path));
Element root = doc.getRootElement();
getEle(root);

}catch (JDOMException e) {
e.printStackTrace();
}
}

public void getEle(Element e){
try{
for (Iterator i=e.getChildren().iterator(); i.hasNext(); ) {
Element child = (Element)i.next();
System.out.println(child.getName()+":"+child.getText());
getEle(child);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
你要先去下载一个jdom的编译器,网上有很多地方可以下载。

这个里面没有使用DTD,你可以把xml里面的DTD文件说明去了,然后把path设置成你xml所在的位置,然后运行这个程序。
blstar 2003-01-02
  • 打赏
  • 举报
回复


--------------因為<contact>和<name>之間有空格或控制符,所以當成一個text結點。。。:才會出現#text's value is

解決辦法:繼續使用getElementsByTagName();

Node node=document.getElementsByTagName("contact").item(0);
//其中contact 是根addressbook的子节点 


Element elContact = (Element)node;
String name = elContact.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
String address = .....
其余均如此操作。
黑马 2003-01-02
  • 打赏
  • 举报
回复
我正在做,也出来,等出来了再告诉你
netkill 2003-01-02
  • 打赏
  • 举报
回复
请大家多多帮忙了,有什么其它的好意见也可以说说,谢谢!
netkill 2003-01-02
  • 打赏
  • 举报
回复
XML文件如下:

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE addressbook SYSTEM "Address.dtd" [
<!ENTITY amp "&#38;" >
<!ENTITY apos "'" >
]>
<addressbook>
<contact>
<name>小陈</name>
<address>dongdaji</address>
<city>guangzhou</city>
<state>guangdong</state>
<zip>222222</zip>
<phone>
<voice>222</voice>
<fax>8888888888</fax>
</phone>
<email>kongmeng@sina.com</email>
<web>http://www.sina.com</web>
<company>avcon</company>
</contact>


<contact>
<name>keri</name>
<address>tt</address>
<city>aa</city>
<state>tt</state>
<zip>222222</zip>
<phone>
<voice>222</voice>
<fax>8888888888</fax>
</phone>
<email>kongmeng@sina.com</email>
<web>http://www.sina.com</web>
<company>avcon</company>
</contact>

</addressbook>

DTD文件如下:
<!ELEMENT addressbook (contact)+>
<!ELEMENT contact (name,address+,city,state,zip,phone,email,web,company)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT zip (#PCDATA)>
<!ELEMENT phone (voice,fax?)>
<!ELEMENT voice (#PCDATA)>
<!ELEMENT fax (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT web (#PCDATA)>
<!ELEMENT company (#PCDATA)>



qlingw 2003-01-02
  • 打赏
  • 举报
回复
建议使用jdom
qlingw 2003-01-02
  • 打赏
  • 举报
回复
能不能把你xml文档贴出来!
netkill 2003-01-02
  • 打赏
  • 举报
回复
大家都不知道吗,请帮忙了。

81,116

社区成员

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

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