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

2024-09-24 00:30:19 发布

您现在位置:Python中文网/ 问答频道 /正文

根据PythonCentral

QWebView ... allows you to display web pages from URLs, arbitrary HTML, XML with XSLT stylesheets, web pages constructed as QWebPages, and other data whose MIME types it knows how to interpret

但是,xml内容的显示方式好像它被解释为html,也就是说,标记被过滤掉,textnodes显示不带换行符。在

问题是:如何在应用xsl样式表的情况下在QWebView中显示xml?

在任何独立的webbrowser中打开的同一个xml文件显示良好。html文件由转换后的xml(由lxml.etree)在QWebView中也显示良好。在

以下是我的(缩写)xml文件:

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

Tags: 文件tofromyouwebhtmldisplayxml
2条回答

我碰到你的问题是因为我有类似的问题。我想我也会把我找到的解决方案发布到这个问题上,因为它不需要QXmlQuery就可以工作,而且非常简单。在

对于我的解决方案,我的xml文件也被解释为HTML,所以我只处理了它,并将每个<替换为&lt;,将每个{}替换为&gt;,将每个{}替换为&amp;,如this所述。在

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

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

这样,如果xml文件被解释为html,那么它至少会正确地显示包含所有标记的文本。在

好吧,我找到了部分解决办法。它是一种使用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样式表没有被应用/找到。在

相关问题 更多 >