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

时间:2017-05-12 09:58:53

标签: python xml qt xslt qwebview

根据PythonCentral

  

QWebView ...允许您显示来自URL的网页,任意HTML,使用XSLT样式表的 XML ,构建为QWebPages的网页以及其知道如何解释的MIME类型的其他数据

然而,xml内容显示为好像它被解释为html,即过滤掉的标签和没有换行的文本节点。

问题是:如何在QWebView中使用xsl样式表显示xml?

在任何独立的webbrowser中打开的相同xml文件显示正常。由转换后的xml(通过lxml.etree)生成的html文件也可以在QWebView中很好地显示。

这是我的(缩写)xml文件:

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type="text/xsl" href="../../page.xsl"?>
<specimen>
    ...
</specimen>

2 个答案:

答案 0 :(得分:0)

好的,我找到了部分解决方案。这是使用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样式表未被应用/找到。

答案 1 :(得分:0)

我遇到了您的问题,因为我遇到了类似的问题。我以为我也可以将找到的解决方案发布到该问题上,因为它无需QXmlQuery就可以工作,而且非常简单。

对于我的解决方案,我的xml文件也被解释为HTML,因此我就使用了该文件,并将每个<替换为&lt;,每个>替换为&gt;this答案中提到的每个&&amp;

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

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

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