【问题标题】:QXmlQuery - passing parameter to XSLTQXmlQuery - 将参数传递给 XSLT
【发布时间】:2018-03-23 09:36:27
【问题描述】:

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 版,它也不会让我感到头疼(以防万一这让您感到困惑)

【问题讨论】:

标签: c++ qt xslt


【解决方案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"/>

它也会起作用。

你仍然可以使用xmlpatterns,只要传入qt-var

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

【讨论】:

  • 是的,这行得通。当然也要感谢@SteakOverflow,他提出了同样的建议。
猜你喜欢
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2015-05-21
  • 2010-12-04
相关资源
最近更新 更多