gpt4 book ai didi

使用 SAX 进行解析并处理字符实体

转载 作者:行者123 更新时间:2023-12-02 10:26:26 26 4
gpt4 key购买 nike

我正在使用 SAX 解析 MathML 表达式(尽管它是 MathML 的事实可能并不完全相关)。输入字符串示例为

<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>&lambda;</mo>
</mrow>
</math>

为了让 SAX 解析器接受这个字符串,我将它扩展了一下:

<?xml version="1.0"?>
<!DOCTYPE doc_type [
<!ENTITY nbsp "&#160;">
<!ENTITY amp "&#38;">
]>
<body>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>&lambda;</mo>
<mrow>
</math>
</body>

现在,当我对此运行 SAX 解析器时,出现异常:

[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 "&#923;">

这给了我

<?xml version="1.0"?>
<!DOCTYPE doc_type [
<!ENTITY nbsp "&#160;">
<!ENTITY amp "&#38;">
<!ENTITY lambda "&#923;">
]>
<body>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>&lambda;</mo>
<mrow>
</math>
</body>

现在,它解析得很好,谢谢。

但是,问题是我无法为 MathML 中可能使用的每个可能的字符实体(例如“part”、“notin”和“sum”)添加 ENTITY 声明。

如何重写此字符串,以便可以解析它以查找可能包含的任何可能的字符实体?

最佳答案

使用引用 MathML DTD 的 DOCTYPE 声明:

<!DOCTYPE math 
PUBLIC "-//W3C//DTD MathML 3.0//EN"
"http://www.w3.org/Math/DTD/mathml3/mathml3.dtd">

或相同的本地副本。

关于使用 SAX 进行解析并处理字符实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com