QXmlQuery - 将参数传递给XSLT

时间:2018-03-23 09:36:27

标签: c++ qt xslt

示例XSLT

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="UTF-8"/>
<xsl:param name="my-param" select="'none'"/>

<xsl:template match="sample">
  <html><body><p>
    parameter: <xsl:value-of select="$my-param"/>
  </p></body></html>
</xsl:template>

示例XML:     

<sample/>

像这样使用xmlpatterns

xmlpatterns sample.xsl sample.xml -param my-param=funky

我可以读取HTML输出:

<html><body><p>
   parameter: funky</p></body></html>

辉煌!

问:如何使用QXmlQuery将my-param传递给我的XSLT?

我怀疑它必须是bindVariable()重载中的一个,但似乎没有一个匹配简单的字符串参数。

重要信息: 我们仍在使用Qt4.7。 但是在互联网上快速浏览一下,QXmlQuery的公共界面在Qt 5.x

中似乎没有什么不同

修改

到目前为止我所拥有的:

QString output;

QXmlQuery query(QXmlQuery::XSLT20);
query.setFocus(QUrl(input_xml));
query.setQuery(QUrl::fromLocalFile(":/sample.xsl"));
query.evaluateTo(&output);

我使用QXmlQuery::XSLT20,因为即使我的XSLT针对版本1.0(以防万一你感到困惑),它给我带来的麻烦最少...

1 个答案:

答案 0 :(得分:1)

您可以有效地使用bindVariable方法,但这取决于您的XSLT。

如果你有

<xsl:param name="my-param" select="$qt-var"/>

以后

parameter: <xsl:value-of select="$my-param"/>

此代码将按预期工作(请注意,在设置查询之前必须绑定变量):

QXmlQuery query(QXmlQuery::XSLT20);
query.bindVariable("qt-var", QVariant("my value"));
query.setFocus(input_xml);
query.setQuery(xslt);
query.evaluateTo(&output);

如果省略xsl:param声明,只需

parameter: <xsl:value-of select="$qt-var"/>

它也会起作用。

只要传入qt-var,您仍然可以使用 xmlpatterns

xmlpatterns sample.xsl sample.xml -param qt-var=qtfunky