首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QXmlQuery -将参数传递给XSLT

QXmlQuery -将参数传递给XSLT
EN

Stack Overflow用户
提问于 2018-03-23 09:36:27
回答 1查看 386关注 0票数 1

样本XSLT

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<sample/>

像这样使用xmlpatterns

代码语言:javascript
复制
xmlpatterns sample.xsl sample.xml -param my-param=funky

我可以使HTML输出读到:

代码语言:javascript
复制
<html><body><p>
   parameter: funky</p></body></html>

非常出色!

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

我怀疑这一定是bindVariable()重载之一,但是没有一个看起来与一个简单的字符串参数匹配。

更多信息,以备不时之需:我们仍在工作中使用Qt4.7。但是在互联网上快速浏览之后,QXmlQuery的公共接口在Qt 5.x上似乎没有什么不同。

编辑

到目前为止我所拥有的是:

代码语言:javascript
复制
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版的(以防万一这让您感到困惑)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-23 10:50:46

您可以有效地使用bindVariable方法,但它依赖于您的XSLT。

如果你有

代码语言:javascript
复制
<xsl:param name="my-param" select="$qt-var"/>

以及以后的

代码语言:javascript
复制
parameter: <xsl:value-of select="$my-param"/>

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

代码语言:javascript
复制
QXmlQuery query(QXmlQuery::XSLT20);
query.bindVariable("qt-var", QVariant("my value"));
query.setFocus(input_xml);
query.setQuery(xslt);
query.evaluateTo(&output);

如果您省略了xsl:param声明,并且只需要

代码语言:javascript
复制
parameter: <xsl:value-of select="$qt-var"/>

它也会起作用。

只要传入qt-var,仍然可以使用can模式:

代码语言:javascript
复制
xmlpatterns sample.xsl sample.xml -param qt-var=qtfunky
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49446414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档