与萨克斯和处理角色实体解析
-
26-10-2019 - |
题
我正在用SAX解析MATHML表达式(尽管它的MathML可能并不完全相关)。一个示例输入字符串是
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</mo>
</mrow>
</math>
为了使SAX解析器接受此字符串,我将其扩展一点:
<?xml version="1.0"?>
<!DOCTYPE doc_type [
<!ENTITY nbsp " ">
<!ENTITY amp "&">
]>
<body>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</mo>
<mrow>
</math>
</body>
现在,当我对此进行萨克斯解析器时,我会得到一个例外:
[Fatal Error] :5:86: The entity "lambda" was referenced, but not declared.
org.xml.sax.SAXParseException: The entity "lambda" was referenced, but not
declared.
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
但是,我知道如何解决这个问题。我只是将此行添加到被解析的字符串中:
<!ENTITY lambda "Λ">
这给了我
<?xml version="1.0"?>
<!DOCTYPE doc_type [
<!ENTITY nbsp " ">
<!ENTITY amp "&">
<!ENTITY lambda "Λ">
]>
<body>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</mo>
<mrow>
</math>
</body>
现在,它可以很好地解析,谢谢。
但是,问题在于,我无法为MathML中可能使用的每个可能使用的字符实体添加实体声明(例如,“ part”,“ notin”和“ sum”)。
如何重写此字符串,以便可以对可能包含的任何可能的字符实体进行解析?
解决方案
使用介绍的Doctype声明 Mathml DTD:
<!DOCTYPE math
PUBLIC "-//W3C//DTD MathML 3.0//EN"
"http://www.w3.org/Math/DTD/mathml3/mathml3.dtd">
或同一本地副本。
不隶属于 StackOverflow