首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >woodstox不能脱机工作。

woodstox不能脱机工作。
EN

Stack Overflow用户
提问于 2017-08-24 16:21:19
回答 1查看 230关注 0票数 0

我在用woodstox解析一些svg文件。只有在我在线的情况下才能工作。离线时,它似乎不会使用woodstox,而是返回到默认的解析器。在这种情况下,速度要慢得多(5分vs15秒)。对于当前的SVG,它还会抛出异常。

我做错了什么吗?为什么woodstox不离线使用?

已使用的Maven依赖关系:

代码语言:javascript
复制
<dependency>
  <groupId>com.fasterxml.woodstox</groupId>
  <artifactId>woodstox-core</artifactId>
  <version>5.0.3</version>
</dependency>

分析代码:

代码语言:javascript
复制
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
XMLEventReader reader = inputFactory.createXMLEventReader(new FileInputStream(svgFile));
while(reader.hasNext()) {
  XMLEvent event = reader.nextEvent();
...
}

这是reader.nextEvent()引发的异常

代码语言:javascript
复制
com.ctc.wstx.exc.WstxIOException: www.w3.org
at com.ctc.wstx.sr.StreamScanner.throwFromIOE(StreamScanner.java:705)
at com.ctc.wstx.sr.ValidatingStreamReader.findDtdExtSubset(ValidatingStreamReader.java:466)
at com.ctc.wstx.sr.ValidatingStreamReader.finishDTD(ValidatingStreamReader.java:326)
at com.ctc.wstx.sr.BasicStreamReader.finishToken(BasicStreamReader.java:3836)
at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2168)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1181)
at org.codehaus.stax2.ri.Stax2EventReaderImpl.nextEvent(Stax2EventReaderImpl.java:255)

这是我的一个SVG。是畸形吗?

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="64px"
 height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
  <g id="Ebene_1">
    <path fill="currentColor" d="M38.338,9.412H12.592v47.438h38.521V22.296L38.338,9.412z M46.728,51.866H17.191V14.129h14.771v12.577
    h14.766V51.866z"/>
  </g>
</svg>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-24 22:31:28

解析器只是尝试使用DOCTYPE声明中指定的URL加载DTD子集:"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd“。这就是xml规范要求它必须做的事情(或者使用某种机制通过公共id获取副本)。无论是否启用了DTD验证,都必须这样做: DTD子集也可能包含实体声明,如果不读取它,就无法知道是否存在实体声明。

但是:如果没有实体,并且不需要DTD验证,则只需完全禁用DTD处理:

代码语言:javascript
复制
inputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false);

这会妨碍阅读。您还会很快发现是否有任何实体您丢失了。:)

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

https://stackoverflow.com/questions/45866642

复制
相关文章

相似问题

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