示例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