首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAX解析器如何阻止SAX解析器连接到Internet?

SAX解析器如何阻止SAX解析器连接到Internet?
EN

Stack Overflow用户
提问于 2015-02-11 17:43:21
回答 1查看 1.5K关注 0票数 3

我试图将11384个XML文件解析到一个SQLite数据库中。其中之一是:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2009/2010/2011 Ulrich Apel.
This work is distributed under the conditions of the Creative Commons
Attribution-Share Alike 3.0 Licence. This means you are free:
* to Share - to copy, distribute and transmit the work
* to Remix - to adapt the work

Under the following conditions:
* Attribution. You must attribute the work by stating your use of KanjiVG in
  your own copyright header and linking to KanjiVG's website
  (http://kanjivg.tagaini.net)
* Share Alike. If you alter, transform, or build upon this work, you may
  distribute the resulting work only under the same or similar license to this
  one.

See http://creativecommons.org/licenses/by-sa/3.0/ for more details.
-->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
<!ATTLIST g
xmlns:kvg CDATA #FIXED "http://kanjivg.tagaini.net"
kvg:element CDATA #IMPLIED
kvg:variant CDATA #IMPLIED
kvg:partial CDATA #IMPLIED
kvg:original CDATA #IMPLIED
kvg:part CDATA #IMPLIED
kvg:number CDATA #IMPLIED
kvg:tradForm CDATA #IMPLIED
kvg:radicalForm CDATA #IMPLIED
kvg:position CDATA #IMPLIED
kvg:radical CDATA #IMPLIED
kvg:phon CDATA #IMPLIED >
<!ATTLIST path
xmlns:kvg CDATA #FIXED "http://kanjivg.tagaini.net"
kvg:type CDATA #IMPLIED >
]>
<svg xmlns="http://www.w3.org/2000/svg" width="109" height="109" viewBox="0 0 109 109">
<g id="kvg:StrokePaths_0ff01" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;">
<g id="kvg:0ff01">
    <path id="kvg:0ff01-s1" d="M54.5,15.79c0,6.07-0.29,55.49-0.29,60.55"/>
    <path id="kvg:0ff01-s2" d="M54.5,88 c -0.83,0 -1.5,0.67 -1.5,1.5 0,0.83 0.67,1.5 1.5,1.5 0.83,0 1.5,-0.67 1.5,-1.5 0,-0.83 -0.67,-1.5 -1.5,-1.5"/>
</g>
</g>
<g id="kvg:StrokeNumbers_0ff01" style="font-size:8;fill:#808080">
    <text transform="matrix(1 0 0 1 45 16)">1</text>
    <text transform="matrix(1 0 0 1 45 88)">2</text>
</g>
</svg>

我使用SAX解析器:

代码语言:javascript
复制
public class SaxKanjivgHandler extends DefaultHandler {
.....
        File folder = new File(KANJIVG_DIRECTORY);
        if (folder.isDirectory()) {
            File[] listOfFiles = folder.listFiles();

            for (File file : listOfFiles) {
                if (file.isFile()) {
                    currentFileName = file.getName();
                    readXmlFromFile(file);
                }
            }
        }
.....
    public void readXmlFromFile(File file) throws ParserConfigurationException,
            SAXException, IOException {

        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        parser.parse(file, this);

    }

当我解析文件时,我得到了以下错误:

线程“主”java.net.SocketException中的异常:在java.net.SocketInputStream.read(未知源)、java.net.SocketInputStream.read(未知源)、java.io.BufferedInputStream.fill(未知源)、java.io.BufferedInputStream.read1(未知源)、java.io.BufferedInputStream.read(未知源)、sun.net.www.MeteredStream.read(未知源)、java.io.FilterInputStream.read(未知源)处重置连接sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown源)在com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(Unknown源)在com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown源)在com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown源)在com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipSpaces(Unknown源)(在com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanEntityDecl(Unknown来源)在com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(Unknown来源)在com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(Unknown来源)在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(Unknown源头)在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(未知来源)在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown源)在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown源)在com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown源)在com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown源)在com.sun.org.apache.xerces.internal。com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown源( com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source),com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown源(com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) ) javax.xml.parsers.SAXParser源( com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source)。SaxKanjivgHandler.readXmlFromFile(SaxKanjivgHandler.java:63) at SaxKanjivgHandler(SaxKanjivgHandler.java:44) at Main.main(Main.java:28)解析(未知源)

首先,我认为这个错误是因为一个准确的文件。但是,不同的文件在不同的时间发生了错误。如何使SAX解析器停止与Internet的连接?

EN

回答 1

Stack Overflow用户

发布于 2015-02-11 17:48:56

你可以提供你自己的EntityResolver

代码语言:javascript
复制
public class DummyEntityResolver implements EntityResolver {
    public InputSource resolveEntity(String publicID, String systemID)
        throws SAXException {

        return new InputSource(new StringReader(""));
    }
}

代码语言:javascript
复制
public void readXmlFromFile(File file) throws ParserConfigurationException,
        SAXException, IOException {

    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = factory.newSAXParser();
    parser.getXMLReader().setEntityResolver(new DummyEntityResolver());
    parser.parse(file, this);

}

这将停止外部实体解析。如果你有一些外部实体,你想提供,你可以做这个检查publicIDsystemID

HTH。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28460885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档