JiveJdon Community Forums
在线124人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi 天极网摘
???en_US.forumThreadNext.name??? 下一主题
Go 共有 5 回复 / 1
 发表新帖子   回复该主题贴
perfectwxj

悄悄话
发表文章: 19
注册时间: 2006年06月28日 15:36
在java程序中用DTD来验证xml格式不起作用是为什么?请教高手 2007年02月01日 11:50 到本帖网址 加入本帖到收藏夹 回复该主题
标签
try {
InputStream in=new FileInputStream(filePath);
SAXReader saxReader = new SAXReader();
this.document = saxReader.read(in);
DocumentBuilderFactory factory = null;
factory = DocumentBuilderFactory.newInstance();
//进行dtd检查
factory.setValidating(true);
} catch (Exception e) {
}
这样写了 但是没有作用
请问该如何设置 saxReader才可以校验
banq

悄悄话
发表文章: 9613
注册时间: 2002年08月03日 17:08
re:在java程序中用DTD来验证xml格式不起作用是为什么?请教高手 2007年02月01日 12:14 到本帖网址 加入本帖到收藏夹 回复该主题
校验时必须连上互联网,它缺省是根据http的DTD来校验的。
你需要手工做个转换,将其切换到本地的DTD
perfectwxj

悄悄话
发表文章: 19
注册时间: 2006年06月28日 15:36
re:在java程序中用DTD来验证xml格式不起作用是为什么?请教高手 2007年02月01日 14:02 到本帖网址 加入本帖到收藏夹 回复该主题
不好意思,我还是不太明白怎么用
我把写好的dtd文件放在了根目录下
在xml文件里
<!DOCTYPE issue SYSTEM "http://127.0.0.1:7001/test/test.dtd">
这样引用了外部的dtd

当用dom4j解析xml的时候没有检查我引用的这个文件

能不能给个类似的java的解析例子

谢谢
perfectwxj

悄悄话
发表文章: 19
注册时间: 2006年06月28日 15:36
re:在java程序中用DTD来验证xml格式不起作用是为什么?请教高手 2007年02月01日 14:03 到本帖网址 加入本帖到收藏夹 回复该主题
“你需要手工做个转换,将其切换到本地的DTD ”


能不能给段代码说明如何转换

arrowsky

悄悄话
发表文章: 2
注册时间: 2007年02月02日 16:19
回复:re:在java程序中用DTD来验证xml格式不起作用是为什么?请教高手 2007年02月02日 16:32 到本帖网址 加入本帖到收藏夹 回复该主题
SAXBuilder builder=new SAXBuilder();
builder.setEntityResolver(new YourDTDResolver());
builder.setValidation(true);


YourDTDResolver implements EntityResolver,实现接口定义的
public abstract InputSource resolveEntity (String publicId,String systemId) throws SAXException, IOException;
方法,在其中添加可以从本地加载dtd的方法,如:
public InputSource resolveEntity(String publicId, String systemId) {
if (systemId != null && systemId.startsWith(URL)) {
logger.debug("trying to locate " + systemId + " in classpath under "+CONFIG_PATH);
// Search for DTD
String path = CONFIG_PATH + systemId.substring(URL.length());
InputStream dtdStream = resourceLoader == null ? getClass()
.getResourceAsStream(path) : resourceLoader
.getResourceAsStream(path);
if (dtdStream == null) {
logger.debug(systemId + " not found in classpath");
return null;
} else {
logger.debug("found " + systemId + " in classpath");
InputSource source = new InputSource(dtdStream);
source.setPublicId(publicId);
source.setSystemId(systemId);
return source;
}
} else {
// use the default behaviour
return null;
}
}

我这样讲你明白吗?
perfectwxj

悄悄话
发表文章: 19
注册时间: 2006年06月28日 15:36
re:在java程序中用DTD来验证xml格式不起作用是为什么?请教高手 2007年02月02日 16:57 到本帖网址 加入本帖到收藏夹 回复该主题
呵呵 还是不太明白
先谢谢楼上的

我用的是dom4j解析的xml文件
StringBuffer errorBuff = new StringBuffer();
InputStream in=new FileInputStream(filePath);
SAXReader saxReader = new SAXReader();
PlanlistHandler handler = new PlanlistHandle(filePath,errorBuff);
DocumentBuilderFactory factory=null;
factory=DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
saxReader.setProperty("http://xml.org/sax/properties/lexicalhandler", handler);
this.document = saxReader.read(in);

设置了saxReader.setProperty也没有用
现在想知道 怎么样能注册上handler
标签
共有 5 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG:
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 插入附件 插入word文档 Txt等文件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl-V可取出;提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区 推荐Chrome快速浏览本站
OpenSource JIVEJDON v3.5 Powered by JdonFramework Code © 2002-09 jdon.com

anti spam