新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论DOM, SAX, XPath等。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DOM/SAX/XPath 』 → [求助]如果让SAX跳过解析实体引用 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5653 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [求助]如果让SAX跳过解析实体引用 举报  打印  推荐  IE收藏夹 
       本主题类别: DOM    
     ronnhu 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:52
      门派:XML.ORG.CN
      注册:2010/3/12

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给ronnhu发送一个短消息 把ronnhu加入好友 查看ronnhu的个人资料 搜索ronnhu在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看ronnhu的博客楼主
    发贴心情 [求助]如果让SAX跳过解析实体引用

    情况如下:
    同一个目录下有两个xml文件:

    all.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE fcom SYSTEM "fcom.dtd"[
    <!ENTITY subcontent SYSTEM "subcontent.xml">
    ]>
    <fcom>
    <title>some title here</title>
    &subcontent;
    <subcontent>content here</subcontent>
    </fcom>

    subcontent.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <subcontent>content from a file</subcontent>

    JAVA代码:
       File parent = new File("D:/techuser/data/techair/a340/fcom/v01/r25a/FunctionTest");
       File xmlFile = new File(parent, "all.xml");
       File outputFile = new File(parent, "output.xml");
       
       XMLReader reader = TechpublisherService.newXMLReader();
       
       reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
       //reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
       
       String xmlHead = TechpublisherService.getXmlHead(xmlFile);//可以不管
       
       ContentHandler outputHandler = new OutputHandler(outputFile, xmlHead);//这个handler只是把独到的xml内容输出到output.xml文件里。
       reader.setContentHandler(outputHandler);
       
       reader.parse(xmlFile.getAbsolutePath());

    当用SAX解析all.xml的时候如果碰到&subcontent;,解析器会去读subcontent.xml里的内容,并将&subcontent;替换成读到的内容。
    这段代码执行的结果是生成一个output.xml文件,里面的内容为:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE fcom SYSTEM "fcom.dtd"[
    ]>
    <fcom>
    <title>some title here</title>

    <subcontent>content from a file</subcontent>
    <subcontent>content here</subcontent>
    </fcom>

    但是我不想解析all.xml里的实体引用,所有为reader加上了一个特性,代码如下:

    reader.setFeature("http://xml.org/sax/features/external-general-entities", false);

    但生成的output.xml里的内容变成了这样:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE fcom SYSTEM "fcom.dtd"[
    ]>
    <fcom>
    <title>some title here</title>

    <subcontent>content here</subcontent>
    </fcom>

    可以看出,all.xml里的&subcontent;被替换成了空字符串。

    我希望的结果是&subcontent;不要被替换掉,把&subcontent;就当做正常的文本字符,不要解析,保留&subcontent;不变,output.xml里该是什么样还是什么样。

    PS:用最新版的xerces-2.9.1,默认是不替换,直接满足我的需求,但我用的是旧版本的,替换为空字符串了。但现在的项目不可能为了解决这个问题而换类库。
    这个问题困扰了我很久,还请各位达人出谋划策,谢谢!


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/3/12 14:40:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DOM/SAX/XPath 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/28 6:32:52

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    46.875ms