【问题标题】:xslt regular expressions to match xml entries and displayxslt 正则表达式匹配 xml 条目并显示
【发布时间】:2010-08-10 19:44:11
【问题描述】:

我知道对你们中的一些人来说这很简单。

我要做的就是查看一个 xml 文档并打印出包含特定字符串片段的 xml 条目。字符串值被传递给 xslt 并查看 xml 文档,如果单词以字符串表达式开头,它会显示它。

我对以下消息有什么错误...

MM_XSLTransform 错误:出错时 转换:'matches()' 是一个 未知的 XSLT 函数。

这是我的代码示例...

<xsl:stylesheet 
  version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">
  <xsl:output method="html" encoding="utf-8"/>
  <xsl:param name="qString" />
  <xsl:template match="/">
    <xsl:for-each select="Products/Product">

        <xsl:if test="matches('/OldPN','$qString')">
          <xsl:value-of select="OldPN" /> - <xsl:value-of select="OldName" />
        </xsl:if>

    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

有什么想法吗?非常感谢您的帮助!

【问题讨论】:

  • 除了需要使用 XSLT 2.0 处理器运行此转换之外,您还应该调用类似 matches(OldPN,$qString) 的函数。如果您无权访问 XSLT 2.0,也许这可以在 XSLT 1.0 中完成。您应该发布您的输入示例和参数qString 示例。

标签: php xml xslt


【解决方案1】:

底层 libxslt 目前仅支持 (e)xslt 1.0。
但是您可以注册 php 函数,例如使preg_match() 可用。

http://docs.php.net/xsltprocessor.registerphpfunctions

【讨论】:

    【解决方案2】:

    用于正则表达式的matches 函数是xslt 2.0 中的新功能,您的xslt 处理器可能还不支持它。如果您可以使用纯字符串而不是正则表达式,则可以尝试使用containsstarts-with

    此外,在您的示例中,第二个参数不能用引号引起来,因为这样您将匹配文字字符串“$qString”而不是此参数的值。

    【讨论】:

    • 感谢您的报价。在我排除“未知的 XSLT 函数”之后,我有点认为会是这种情况。我在想我的问题是缺乏对 2.0 的支持。 “包含”可能会按照您的建议工作,但除此之外,它可能会回到绘图板上寻求另一种解决方案。
    【解决方案3】:

    如果您使用的是 .NET,您可以通过从宿主程序注入您自己的 IL 方法来扩展 xslt。通过这种方式添加正则表达式支持会很容易。

    【讨论】:

      猜你喜欢
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多