再次遇到问题,望大虾指教。有关XML解析的。等呀等呀

xiaoyue_yu 2003-10-09 02:29:38
片断代码如下:
这是引用的包
import java.io.*; //Java基础包,包含各种IO操作
import java.util.*; //Java基础包,包含各种标准数据结构操作
import javax.xml.parsers.*; //XML解析器接口
import org.w3c.dom.*; //XML的DOM实现


当运行到下面的时候有如下问题
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
Document doc = null;

try {
db = dbf.newDocumentBuilder();
}
catch (ParserConfigurationException pce) {
System.out.println(pce.toString());
return;
}

try {
System.out.println("1111111111111");
doc = db.parse(file);
System.out.println("2222222222222");
doc.normalize();
}
catch (org.xml.sax.SAXException saxe) {
System.out.println("SAXException occured!");
return;
}
catch (IOException ioe) {
System.out.println("IOException occured!");
return;
}

问题:jb提示 doc = db.parse(file); 这一句需要扑获org.xml.sax.SAXException和java.io.IOException。我不是使用DOM吗?跟sax有什么关系呢?应该提示我扑获DOMException才对呀。另外,程序到这一句就抱错。xml文件路径肯定没问题,因为我故意写错,能够条到IOException中来。那么错误又是什么呢?
...全文
57 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liad 2003-10-13
  • 打赏
  • 举报
回复
Sorry,之前我真的没有仔细测试读中文节点的

// Dom1.java
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;

public class Dom1 {
public static void main(String[] args)
{
Document doc = parseXmlFile("input.xml", false);
Element element = doc.getDocumentElement();
System.out.println(element.toString());
}

// Parses an XML file and returns a DOM document.
// If validating is true, the contents is validated against the DTD
// specified in the file.
public static Document parseXmlFile(String filename, boolean validating)
{
try {
// Create a builder factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(validating);

// Create the builder and parse the file
Document doc = factory.newDocumentBuilder().parse(new File(filename));
return doc;
} catch (SAXException e) {
e.printStackTrace();
// A parsing error occurred; the xml input is not valid
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}


输出:
<日期>
<年>2003</年>
<月>10</月>
<日>13</日>
</日期>


input.xml可以为以下的形式
1.
<?xml version="1.0" encoding="UTF-8"?>
<日期>
<年>2003</年>
<月>10</月>
<日>13</日>
</日期>

要用记事本另存成编码为Unicode的文件。


2.
<?xml version="1.0" encoding="GB2312"?>
<日期>
<年>2003</年>
<月>10</月>
<日>13</日>
</日期>

可以保存为Unicode编码,也可以存为ANSI编码
xiaoyue_yu 2003-10-13
  • 打赏
  • 举报
回复
liad() 大哥:那你贴出的有关transfer得那段代码我该加在哪里呀?现在我有一个Document对象doc,如果不加处理,有中文酒抛出SAXException错误。我问的就是怎么处理,你处理的代码我怎么加,加在哪里?
liad 2003-10-13
  • 打赏
  • 举报
回复
读不了吗?你贴出你读不了的代码。
xiaoyue_yu 2003-10-13
  • 打赏
  • 举报
回复
楼上二位大哥,transformer.transform(source, result)是不是写入到xml文件呢?那要是读xml文件中标记名或值为中文的情况该怎么办呢???
xiaoyue_yu 2003-10-13
  • 打赏
  • 举报
回复
真是怪了,这问题没有了,中文原来可以。哎,接铁散分
etre 2003-10-11
  • 打赏
  • 举报
回复
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;


public class xmlwriter {

public static void main(String args[]){
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse("links.xml");
doc.normalize();
//---取得变量----
String text="Wudong's Homepage";
String url="www.wudong.com";
String author="Wudong Liu";
String discription="A site from Wudong Liu, give u lots of suprise!!!";
//-------------
Text textseg;
Element link=doc.createElement("link");

Element linktext=doc.createElement("text");
textseg=doc.createTextNode(text);
linktext.appendChild(textseg);
link.appendChild(linktext);

Element linkurl=doc.createElement("url");
textseg=doc.createTextNode(url);
linkurl.appendChild(textseg);
link.appendChild(linkurl);

Element linkauthor=doc.createElement("author");
textseg=doc.createTextNode(author);
linkauthor.appendChild(textseg);
link.appendChild(linkauthor);

java.util.Calendar rightNow = java.util.Calendar.getInstance();
String day=Integer.toString(rightNow.get(java.util.Calendar.DAY_OF_MONTH));
String month=Integer.toString(rightNow.get(java.util.Calendar.MONTH));
String year=Integer.toString(rightNow.get(java.util.Calendar.YEAR));
Element linkdate=doc.createElement("date");

Element linkdateday=doc.createElement("day");
textseg=doc.createTextNode(day);
linkdateday.appendChild(textseg);

Element linkdatemonth=doc.createElement("month");
textseg=doc.createTextNode(month);
linkdatemonth.appendChild(textseg);


Element linkdateyear=doc.createElement("year");
textseg=doc.createTextNode(year);
linkdateyear.appendChild(textseg);

linkdate.appendChild(linkdateday);
linkdate.appendChild(linkdatemonth);
linkdate.appendChild(linkdateyear);
link.appendChild(linkdate);

Element linkdiscription=doc.createElement("description");
textseg=doc.createTextNode(discription);
linkdiscription.appendChild(textseg);
link.appendChild(linkdiscription);

doc.getDocumentElement().appendChild(link);

TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new java.io.File("links.xml"));
transformer.transform(source, result);
}catch(Exception e){
e.printStackTrace();
}
}
}
liad 2003-10-10
  • 打赏
  • 举报
回复
看看这个:

// BasicDom.java
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import org.xml.sax.*;

public class BasicDom {
public static void main(String[] args)
{
Document doc = parseXmlFile("infilename.xml", false);
// Add a CDATA section to the root element
Element element = doc.getDocumentElement();
Text text = doc.createTextNode("我是谁\n");
element.appendChild(text);
System.out.println(element);

// Special characters are automatically converted to entities by the XML writers
text = doc.createTextNode("<>&\"'");
element.appendChild(text);

// Save the document to the disk file
try
{
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
aTransformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
Source src = new DOMSource(doc);
Result dest = new StreamResult(new File("out.xml"));
aTransformer.transform(src, dest);
}
catch (TransformerConfigurationException e)
{
e.printStackTrace();
}
catch (TransformerException e)
{
e.printStackTrace();
}
}

// Parses an XML file and returns a DOM document.
// If validating is true, the contents is validated against the DTD
// specified in the file.
public static Document parseXmlFile(String filename, boolean validating)
{
try {
// Create a builder factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(validating);

// Create the builder and parse the file
Document doc = factory.newDocumentBuilder().parse(new File(filename));
return doc;
} catch (SAXException e) {
// A parsing error occurred; the xml input is not valid
} catch (ParserConfigurationException e) {
} catch (IOException e) {
}
return null;
}
}

设置了aTransformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
输入和输出的xml文件

infilename.xml
==============
<?xml version="1.0" encoding="UTF-8"?>
<map>
<entry key="key1" value="value1" />
<entry key="key2" />
</map>

out.xml
=======
<?xml version="1.0" encoding="GB2312"?>
<map>
<entry key="key1" value="value1"/>
<entry key="key2"/>
我是谁
<>&"'</map>
xiaoyue_yu 2003-10-10
  • 打赏
  • 举报
回复
up
xiaoyue_yu 2003-10-09
  • 打赏
  • 举报
回复
我刚才试验了一下,发现xml文档。无论是标记名还是值,都必须是英文才行。那有什么方法能支持中文吗?另外,JDom解析时不是和我现在所用的不一样呀。能给个简单例子吗?
北极猩猩 2003-10-09
  • 打赏
  • 举报
回复
“跟sax有什么关系呢?应该提示我扑获DOMException才对呀”
Java的文档中就是这样规定的,抛出SAXException。我想应该是parse内部使用SAX读取XML文档的内容。
至于第二个问题可能是,你的XML文档格式错误造成的
xiaoyue_yu 2003-10-09
  • 打赏
  • 举报
回复
输出SAXException occured!

报错信息也就是
doc = db.parse(file);
发生了SAXException.
tifaling 2003-10-09
  • 打赏
  • 举报
回复
报错信息是什么?

67,512

社区成员

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

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