我有验证的XML字符串。有时,该文档未通过验证。因为有一个词“Weiß”。如何解决此问题和其他类似错误?据我所知,在字母“ß”上发誓。但奇怪的行为,第一次抛出错误,但第二次,同一行已经有效。我使用xerces库。
org.xml.sax.SAXParseException; lineNumber: 19; columnNumber: 17; The entity "szlig" was referenced, but not declare
验证
SchemaFactory factory = new XMLSchemaFactory();
try {
InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(WTConstants.XSD_VALIDATOR);
if (xmlString.startsWith("\uFEFF")) {
xmlString = xmlString.substring(1);// remove BOM
}
Schema schema = factory.newSchema(new StreamSource(stream));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new StringReader(xmlString)));
} catch (SAXException | IOException e) {
logger.error("Validation error: ", e);
isXmlValid = false;
}
感谢。
答案 0 :(得分:0)
尝试添加以下代码或将x字符替换为xml中的ß
。这应该适合你。
<!DOCTYPE definition [
<!ENTITY szlig "ß">
]>
常规解决方案
您可以使用DOCTYPE声明引用MathML DTD或本地副本:
<!DOCTYPE math
PUBLIC "-//W3C//DTD MathML 3.0//EN"
"http://www.w3.org/Math/DTD/mathml3/mathml3.dtd">
此DTD具有所有实体引用。
答案 1 :(得分:0)
在XML中预先声明的唯一实体是lt,gt,amp,quot和apos。如果您使用任何其他实体名称,则必须声明它。
这并不会阻止您使用特殊字符。有三种方法可以使用非ASCII字符,例如XML中的ß:
(a)直接输入字符(确保编辑器配置为使用与XML声明中声明的编码匹配的字符编码)。
(b)使用数字字符引用,例如ß
(c)使用&eszet;
之类的实体引用,确保在DTD中声明该实体。