如何使用 PyQt 的 QWebView 来显示 xml witl xslt 应用



根据 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,所以我只是使用它并用 &lt; 替换每个<,用 &gt; 替换每个>,用&amp;替换每个&,如本答案中所述。

因此,对于您的 xmlString,只需执行以下操作:

xmlString.replace("<","&lt;").replace(">","&gt;").replace("&", "&amp;")

这样,如果您的 xml 文件被解释为 html,它至少会正确显示带有所有标签的文本。

最新更新