示例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(以防万一你感到困惑),它给我带来的麻烦最少...
答案 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