2011-05-06 48 views
0

我正在學習XSLT,此刻我很困難,找不到解決方案。如果你能幫助我,我真的很感激。 下方,你可以找到一個例子XSLT問題:在字符串中搜索子字符串「"」或「>」

價值$字符串:

<img src="Afbeeldingen_Hotpot/beer.jpg" alt="afbeelding van een beer" title="beer" width="170" height="144" style="display:block; margin-left:auto; margin-right:auto; text-align:center;" style="float:center;" /> 

我的目標是過濾掉圖像的高度......在這個例子中「144」。 的functx:指數的字符串,我從這個網站有:http://www.xsltfunctions.com/xsl/functx_index-of-string.html

這對XSLT的代碼,我現在使用:

<xsl:variable name="positionHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($string,'height=') + 8"/></xsl:variable> 
    <xsl:variable name="partStringHeight" as="xs:string"><xsl:value-of select="substring($string,$positionHeight)"/></xsl:variable> 
    <xsl:variable name="lengthHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($partStringHeight,'style=' - 3)"/></xsl:variable> 
    <xsl:variable name="height" as="xs:string"><xsl:sequence select="substring($partStringHeight,1,$lengthHeight)"/></xsl:variable> 

下的XSLT代碼,我想用,但給人因爲一個錯誤。索引的字符串爲「"」零」

<xsl:variable name="positionHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($string,'height=') + 8"/></xsl:variable> 
    <xsl:variable name="partStringHeight" as="xs:string"><xsl:value-of select="substring($string,$positionHeight)"/></xsl:variable> 
    <xsl:variable name="lengthHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($partStringHeight,'&quot;' - 1)"/></xsl:variable> 
    <xsl:variable name="height" as="xs:string"><xsl:sequence select="substring($partStringHeight,1,$lengthHeight)"/></xsl:variable> 

有沒有辦法讓像一個子指數:

&quot; and &amp;#x003E; 

因爲我有很多絲線我需要的高度,但其中「風格=」不會發生..

回答

2

在XSLT通常的解決辦法是把不方便串入一個變量的值(不使用select ):

<xsl:variable name="quot">"</xsl:variable> 

然後

<xsl:variable name="lengthHeight" as="xs:integer" 
    select="functx:index-of-string($partStringHeight,$quot) - 1" /> 

此外,通知你已經把- 3- 1insid eindex-of-string()括號。當然,你想從返回值index-of-string()減去3或1?因爲從"減去3或1是沒有意義的。

另外,在像這樣的變量定義體內使用<xsl:value-of />通常是多餘的。我刪除它。

最後,你可以使用substring-before()substring-after()得到你想要的東西少些麻煩:

<xsl:variable name="beforeHeight" as="xs:integer">height="</xsl:variable> 
<xsl:variable name="afterHeight" as="xs:string">" style=</xsl:variable> 
<xsl:variable name="height" as="xs:string" 
    select="substring-before(substring-after($string, $beforeHeight), $afterHeight)" /> 

其實我不是從你的問題一定要顯示在上面輸入字符串值之前還是在XML解析之後。如果是解析後,即字符串數據本身包含&quot;而非",再放入&quot;,但你需要躲避&&amp;

<xsl:variable name="beforeHeight" as="xs:integer">height=&amp;quot;</xsl:variable> 
<xsl:variable name="afterHeight" as="xs:string">&amp;quot; style=</xsl:variable> 

在這種情況下,你不會有引號的字符串,所以你不需要把值放在這樣的變量中;但這對於可讀性來說可能是一個好主意。

同樣&amp;#x003e需要轉義爲&amp;amp;#x003e

+0

Wauw感謝您的明確解釋!字符串是在轉換之前...爲了不好,我必須現在去,但我會明天檢查出來! – user737917 2011-05-06 17:48:08

+0

對於正確的答案+1。 – 2011-05-07 03:05:42

+1

感謝您的幫助!它現在正在工作並使用子串 - 之前和之後都好多了! :) – user737917 2011-05-07 09:42:47