xml - XSLT 2.0 中的简洁正则表达式提取功能

标签 xml xslt

正如我从 XSLT 2.0 文档中看到的那样,或者至少从我在这些地方读到的内容中可以看出:

Saxon analyze-string function

XML.com

使用正则表达式从某些输入中提取特定组的唯一方法是使用analyze-string()。相比之下,replace() 函数非常简洁,那么是否有同样简洁的提取方法呢?

例如,给定输入:“ABCD:123,DEFGH”,我想仅提取“123”并将其存储在变量中。请注意,输入可能更复杂,因此我确实想利用正则表达式和分组。

tokenize() 不是答案,IMO,因为它似乎更适合输入具有重复分隔符的情况。

我正在寻找一个像 replace() 一样简洁的函数,并且可能像这样工作:

<xsl:variable name="num" select="extract('.', '(.+):\s*(\d+), (.+)', '$2')"/>

但我找不到。看来我必须像下面那样使用analyze-string(),但它太长了:

<xsl:variable name="num">
  <xsl:analyze-string select="." regex="(.+):\s*(\d+), (.+)">

    <xsl:matching-substring>
      <xsl:value-of select="regex-group(2)"/>
    </xsl:matching-substring>

  </xsl:analyze-string>
</xsl:variable>

实际上有必要使用analyze-string()还是我遗漏了什么?

最佳答案

replace()正是您正在寻找的。 matches() 是用于比较的函数,replace() 用于提取。如果您在示例中用 replace 替换 extract ,它就可以正常工作 XSLT 转换不会更改您的输入。它将您的输入转换为输出。您的输入将完好无损。

关于xml - XSLT 2.0 中的简洁正则表达式提取功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39401716/

相关文章:

java - 为什么我的 GWT Web 应用程序无法正常运行?

android - RecyclerView.Adapter 在一行中显示 2 个项目(如何更改)

xml - 在 XSL 输出上添加 DOCTYPE 声明

xslt - 如何更改每个 xsl 的顺序?

具有默认命名空间设置为 xmlns 的 XML 源的 XSLT

xml - 如何有条件地转换 XML 节点,而不忽略此条件之外的实例?

java - 添加新 fragment 时显示的按钮

java - 如何使用 JAXB 解析 webflow

xml - R:使用 rvest 包而不是 XML 包从 URL 获取链接

c# - 有没有办法获得来自 XSLT 转换 'on the fly' 的 asp.net 页面?