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>
答案 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,因此我就使用了该文件,并将每个<
替换为<
,每个>
替换为>
, this答案中提到的每个&
和&
。
因此,对于您的xmlString,只需执行以下操作:
xmlString.replace("<","<").replace(">",">").replace("&", "&")
这样,如果您的xml文件被解释为html,它将至少正确显示带有所有标签的文本。