QXMLQUERY-将参数传递到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的公共界面似乎没有什么不同。

编辑

到目前为止我拥有的东西:

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版,它也会给我最小的头痛(以防万一您感到困惑(

您可以有效地使用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"/>

它也可以工作。

您仍然可以使用 xmlpatterns ,只要通过:

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

最新更新