使用 XSLT,如何使用 .NET 项目中的变量将属性与正则表达式匹配



我正在研究一个.NET项目,该项目使用XSLT将xml文件转换为不同的格式。

我有这样的原始 xml(这只是相关部分(:

<video>
    <part ids="pt1">
        <title>Title1</title>
    </part>
    <part ids="pt2 pt3">
        <title>Title2</title>
    </part>
    <part ids="pt4">
        <title>Title3</title>
    </part>
</video>

在我的 xslt 文件中,我有一个变量$partid它被设置为类似于 pt2 .然后我想使用它来查找包含属性ids中的变量$partid<part>中的<title>

我最初是用以下内容来执行此操作的:

<xsl:value-of select="/video/part[contains(@ids, $partid)]/title"/>

但是,我现在意识到,如果$partid类似于pt1,但存在一个<part>元素,ids 作为pt12,以及一个ids pt1<part>元素,这会遇到问题。因为这将匹配两者。

我想我可以交换它以使用 matches() 而不是 contains() 并使用如下所示的正则表达式:

matches(@ids, '(^'+$partId+' | '+$partId+' | '+$partId+'$ |^'+$partId+'$)')

但是,我似乎仅限于不允许matches()的 XSLT 1.0 .关于我如何进行这项工作的任何想法?

非常感谢。

XSLT 1.0 中没有正则表达式支持。要消除 pt1 和 pt 12 之间的歧义,您可以执行以下操作:

<xsl:value-of select="/video/part[contains(concat(' ', @ids, ' '), concat(' ', $partid, ' '))]/title"/>

更好的解决方案是上游:以这种方式使用 XML 真的没有什么意义。

相关内容

  • 没有找到相关文章

最新更新