2014-10-07 69 views
1

我正在使用XSLT將xml文件轉換爲其他格式的.NET項目。使用XSLT,如何使用.NET項目中的變量將屬性與正則表達式匹配?

我有原始的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。然後我想用它來找到在<part>內的<title>,其中包含屬性ids中的變量$partid

我是用下面原來這樣做:

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

不過,我現在已經意識到這個過程中遇到問題,如果$partid是一樣的東西pt1但存在與<part>元素idspt12以及一個<part>元素,idspt1。因爲這將符合兩者。

我想我可能只是將其交換使用matches()代替和使用這樣的正則表達式:

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

但是,似乎我只限於XSLT 1.0不允許matches()。有關我如何繼續進行此操作的任何想法?

非常感謝。

回答

1

XSLT 1.0中沒有正則表達式支持。爲了消除pt1和PT 12之間的模糊性,你可以這樣做:

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

一個更好的解決辦法是你上游:有一個在使用XML這種方式真的沒有什麼意義。

+0

真棒解決方案。它的簡單性很棒。希望我已經想到了。非常感謝。 – AndrewPolland 2014-10-08 08:07:54