首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Woodstox StAX -如何关闭文本内容验证?

Woodstox StAX -如何关闭文本内容验证?
EN

Stack Overflow用户
提问于 2013-01-26 05:54:14
回答 2查看 954关注 0票数 0

我正在使用默认的Woodstox EventReader读取XML文件,例如:

代码语言:javascript
复制
XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream(fileName));

如果输入文件的某些文本内容中恰好包含Unicode空字符,则会发生以下异常/Stacktrace:

代码语言:javascript
复制
WstxUnexpectedCharException.<init>(String, Location, char) line: 17 
ValidatingStreamReader(StreamScanner).constructNullCharException() line: 604    
ValidatingStreamReader(StreamScanner).throwInvalidSpace(int, boolean) line: 633 
ValidatingStreamReader(BasicStreamReader).readTextSecondary(int, boolean) line: 4624    
ValidatingStreamReader(BasicStreamReader).finishToken(boolean) line: 3661   
ValidatingStreamReader(BasicStreamReader).next() line: 1063 
WstxEventReader(Stax2EventReaderImpl).nextEvent() line: 255 

我希望避免验证文本内容。在XMLInputFactory上设置IS_VALIDATING不能解决问题。

检查源代码后,BasicStreamReader的next()似乎引用了"mValidateText“变量来确定是否验证。

来自源代码:

代码语言:javascript
复制
/**
 * Flag that indicates that textual content (CDATA, CHARACTERS) is to
 * be validated within current element's scope. Enabled if one of
 * validators returns {@link XMLValidator#CONTENT_ALLOW_VALIDATABLE_TEXT},
 * and will prevent lazy parsing of text.
 */
protected boolean mValidateText = false;

我似乎想不出如何在InputFactory或EventReader中更改/设置此值?也许我需要指示InputFactory不使用ValidatingStreamReader,而是使用TypedStreamReader?

EN

回答 2

Stack Overflow用户

发布于 2013-01-26 17:12:20

需要一个符合规范的XML解析器来拒绝格式错误的内容。您需要修复您的(非)XML,并让解析器完成它的工作。

票数 3
EN

Stack Overflow用户

发布于 2013-01-26 11:54:07

这不是验证,而是基本的格式良好性问题。验证与DTD、RelaxNG或XML Schema等模式一起使用,这些模式可以为文本内容定义特定的结构或值。因此,与验证相关的设置不会产生任何影响,因为如果内容是格式良好的XML,则会对此进行处理。

您需要做的是对内容进行预处理,以删除或替换少量在XML中非法的字符。这包括0字节。

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

https://stackoverflow.com/questions/14530963

复制
相关文章

相似问题

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