jdk 1.4 解析xml问题,急,在线!

liujuntao 2003-01-27 12:00:11
java程序:
import java.io.IOException;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;

/**
* @author Administrator
* @date 2003/1/14
* @commit 用JAVA解析XML
*
*/
public class XmlDisplay {
public static void main(String args[])
throws ParserConfigurationException,IOException,SAXException{

//解析器工厂,获得一个具体的解析器对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//这个对象代表了具体的DOM解析器
DocumentBuilder builder= factory.newDocumentBuilder();
//解析xml文件
Document doc= builder.parse("link.xml");
//去掉XML文档中作为格式化内容的空白而映射在DOM树中的不必要的Text Node对象
doc.normalize();
//获得根节点名称
Element root = doc.getDocumentElement();
System.out.println(root.getNodeName());

NodeList links = doc.getElementsByTagName("link");

for (int i=0;i<links.getLength();i++){
Element link=(Element) links.item(i);
System.out.println("Content: ");
System.out.print("URL: ");
System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue());
System.out.print("Author: ");
System.out.println(link.getElementsByTagName("author").item(0).getFirstChild().getNodeValue());

System.out.print("Description: ");
System.out.println(link.getElementsByTagName("description").item(0).getFirstChild().getNodeValue());
System.out.println();
}
}

}


xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<links>
<link>
<text>JSP Insider</text>
<url newWindow="no">http://www.jspinsider.com</url>
<author>JSP Insider</author>
<description>A JSP information site.</description>
</link>

<link>
<text>The makers of Java</text>
<url newWindow="no">http://java.sun.com</url>
<author>Sun Microsystems</author>
<description>Sun Microsystem's website.</description>
</link>

</links>


我运行是正确的,但是呢,如果,我在java程序中,没有xml的节点的名称,
就是说:xml中的link,text,author...是未知的,我应该怎么做呀?
怎样才能正确解析,并得出结果呀!
...全文
148 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonzhao 2003-02-05
  • 打赏
  • 举报
回复
只用jdk1.4……毫无理由的条件!
liujuntao 2003-01-27
  • 打赏
  • 举报
回复
那有没有别的方法,就是说,不用这个类包,来解决这个问题呢?
就像Vector一样,根据size,做个循环,在取里面的数据,用index,就可以!
有没有这种方式?
teddy_huang 2003-01-27
  • 打赏
  • 举报
回复
你不根据节点名字怎么判断它是不是你要的数据呢?
SAX是顺序分析读取XML文件
asdmonster 2003-01-27
  • 打赏
  • 举报
回复
个人以为link,text,author...等是你在写XML时需要定义的。
liujuntao 2003-01-27
  • 打赏
  • 举报
回复
就是不根据节点的名字,而是,根据节点的顺序,来取出里面的数据的!
study_body 2003-01-27
  • 打赏
  • 举报
回复
你的需求是什么啊?想根据什么查找节点呢?
zeeler 2003-01-27
  • 打赏
  • 举报
回复
CSDN上面有比较详细和完整的“XML的Java解析”,你可以去看看,已经很详细了,例子也有。
liujuntao 2003-01-27
  • 打赏
  • 举报
回复
我的主题,就是写的jdk1.4解析xml呀,已经注明了呀
不知道,有没有别的方法?可以不用知道节点的名称的!
如果,我需要解析的xml文件很多,但是里面有不同的节点名称,如果解析必须知道名称,岂不是要有很多的程序么?或是通过bean来传给她参数!
WAPQQ 2003-01-27
  • 打赏
  • 举报
回复
老大xml这么久了xpath是什么你不知道。
xpath定位路径语言。
sun早支持了。
为什么说我答非所问。我不知道楼主什么意思???

如果只用jdk1.4的包,其他的不用!
在提问时请注明。
liujuntao 2003-01-27
  • 打赏
  • 举报
回复
???xpath?什么呀?
请你不要答非所问,好么?
我只用jdk1.4的包,其他的不用!
WAPQQ 2003-01-27
  • 打赏
  • 举报
回复
如果这样,
就可能用xpath了.
liujuntao 2003-01-27
  • 打赏
  • 举报
回复
for (int k = 0; k < nodes_k.getLength); k++)
                  ||
此处,报错,在类Node ,好像是没有这个方法的!不可以用的!
还有:PrintStream,我没有这个类!在那个包呀?
study_body 2003-01-27
  • 打赏
  • 举报
回复
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;

public class ChessboardDOMPrinter {
private DocumentBuilder builder;

public void print(String fileName, PrintStream out)
throws SAXException, IOException {
Document document = builder.parse(fileName);
NodeList nodes_i
= document.getDocumentElement().getChildNodes();
for (int i = 0; i < nodes_i.getLength(); i++) {
Node node_i = nodes_i.item(i);
if (node_i.getNodeType() == Node.ELEMENT_NODE
&& ((Element) node_i).getTagName()
.equals("CHESSBOARD")) {
Element chessboard = (Element) node_i;
NodeList nodes_j = chessboard.getChildNodes();
for (int j = 0; j < nodes_j.getLength(); j++) {
Node node_j = nodes_j.item(j);
if (node_j.getNodeType() == Node.ELEMENT_NODE) {
Element pieces = (Element) node_j;
NodeList nodes_k = pieces.getChildNodes();
for (int k = 0; k < nodes_k.getLength); k++) {
Node node_k = nodes_k.item(k);
if (node_k.getNodeType() == Node.ELEMENT_NODE) {
Element piece = (Element) node_k;
Element position
= (Element) piece.getChildNodes().item(0);
out.println((pieces.getTagName()
.equals("WHITEPIECES")
? "White " : "Black ")
+ piece.getTagName().toLowerCase()
+ ": "
+ position.getAttribute("COLUMN")
+ position.getAttribute("ROW"));
}
}
}
}
}
}
return;
}
}

仅供参考

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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