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

时间:2014-10-07 15:17:22

标签: .net xml regex xslt xslt-1.0

我正在开发一个.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之类的变量。然后,我想使用此功能在<title>中查找属性<part>中包含变量$partid的{​​{1}}。

我最初使用以下内容执行此操作:

ids

但是,如果<xsl:value-of select="/video/part[contains(@ids, $partid)]/title"/> 类似$partid,但pt1元素<part> idspt12,我现在意识到这会遇到问题以及<part>元素以idspt1。因为这将匹配两者。

我以为我可以将它换成使用matches()代替contains()并使用这样的正则表达式:

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

然而,我似乎仅限于XSLT 1.0,它不允许matches()。关于如何处理这个问题的任何想法?

非常感谢。

1 个答案:

答案 0 :(得分:1)

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

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

更好的解决方案将在您的上游:以这种方式使用XML毫无意义。