我正在使用QXmlSimpleReader
来解析其中包含内部定义实体的XML文件,例如
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ELEMENT root (#PCDATA)>
<!ENTITY ent "some internally defined entity">
]>
<root>
text &ent; text
</root>
我正在处理带有QXmlDefaultHandler
子类的文档,而我对内部实体所能做的最多就是报告它们的使用情况。
默认情况下,所有内部定义的实体(上例中的&ent;
)都会自动替换为字符。如何更改此行为,以便我可以指定替换它们的字符串?如果要使其工作,我也可以切换到另一个Qt的XML阅读器。
答案 0 :(得分:0)
我找到了一种方法,虽然它更像是一个黑客然后是一个正确的解决方案,因为它并没有阻止Qt实际用已解决的实体替换实体字符。它只是一种解决方法,忽略了这些字符。
首先,通过设置相应的功能并处理内容和词汇信息来制作QXmlSimpleReader
报告实体:
QXmlSimpleReader xmlReader;
xmlReader.setFeature("http://qt-project.org/xml/features/report-start-end-entity", true);
xmlReader.setContentHandler(handler);
xmlReader.setLexicalHandler(handler);
接下来,在上面的handler
中,覆盖bool QXmlLexicalHandler::startEntity(const QString &name)
和bool QXmlLexicalHandler::endEntity(const QString &name)
并保持读者当前正在阅读实体的状态。如果是,请忽略来自bool QXmlContentHandler::characters(const QString &ch)
的输入,而只需处理startEntity
或endEntity
中的分辨率。