根据 PythonCentral :
QWebView ...允许您显示来自 URL、任意 HTML、带有 XSLT 样式表的 XML、构造为 QWebPages 的网页以及它知道如何解释其 MIME 类型的其他数据
但是,XML 内容的显示就像被解释为 html 一样,也就是说,过滤掉的标记和显示的文本节点没有换行符。
问题是:如何在应用 xsl 样式表的情况下在 QWebView 中显示 xml?
在任何独立的网络浏览器中打开的相同 xml 文件显示正常。由转换后的xml(由lxml.etree(生成的html文件在QWebView中也显示得很好。
这是我的(缩写(xml文件:
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type="text/xsl" href="../../page.xsl"?>
<specimen>
...
</specimen>
,我找到了部分解决方案。这是一种使用 QXmlQuery 的多步骤方法:
path = base + "16000-16999/HF16019"
xml = os.path.join(path, "specimen.xml")
xsl = os.path.join(path, "../../page.xsl")
app = QApplication([])
query = QXmlQuery(QXmlQuery.XSLT20)
query.setFocus(QUrl("file:///" + xml));
query.setQuery(QUrl("file:///" + xsl));
out = query.evaluateToString();
win = QWebView()
win.setHtml(out);
win.show()
app.exec_()
显然,xslt 是这样应用的。仍然错误的是xslt中引用的css样式表没有应用/找到。
我遇到了你的问题,因为我有类似的问题。我想我也会发布我找到的解决方案,因为它可以在没有QXmlQuery的情况下工作并且相当简单。
对于我的解决方案,我的 xml 文件也被解释为 HTML,所以我只是使用它并用 <
替换每个<
,用 >
替换每个>
,用&
替换每个&
,如本答案中所述。
因此,对于您的 xmlString,只需执行以下操作:
xmlString.replace("<","<").replace(">",">").replace("&", "&")
这样,如果您的 xml 文件被解释为 html,它至少会正确显示带有所有标签的文本。