样本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>非常出色!
问:如何使用my-param将QXmlQuery传递给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版的(以防万一这让您感到困惑)
发布于 2018-03-23 10:50:46
您可以有效地使用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,仍然可以使用can模式:
xmlpatterns sample.xsl sample.xml -param qt-var=qtfunkyhttps://stackoverflow.com/questions/49446414
复制相似问题