2015-07-21 44 views
0

這是我的測試輸入:在XSLT代碼中使用正則表達式捕獲文本中的網址

<license> 
    <p>some text (http://creativecommons.org/licenses/by/3.0/) some text.</p> 
</license> 

所需的輸出:

<license xlink:href="http://creativecommons.org/licenses/by/4.0/"> 
    <p>some text (http://creativecommons.org/licenses/by/3.0/) some text.</p> 
</license> 

基本上我試圖複製網址裏面的文字,其中license元素不包含屬性xlink:href="http:// ******">通過 看在孩子<license-p>和移動任何URL到xlink:href屬性父母(許可證)

這裏是我的XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xlink="http://www.w3.org/1999/xlink" 

exclude-result-prefixes="xs" 
version="3.0"> 
    <xsl:output method="html" encoding="UTF-8" indent="yes" /> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="license"> 
      <xsl:copy> 
      <xsl:attribute name="xlink:href">      
       <xsl:value-of select='replace(p,"[\s\S]*" ,"(\b(?:(?:https?|ftp):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&amp;@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&amp;@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&amp;@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&amp;@#\/%=~_|$]))")'/> 
      </xsl:attribute> 
      <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="p/@xlink:href"/> 
</xsl:stylesheet> 

我使用的是不工作的,由於人物像撒克遜的正則表達式?

+1

什麼的'替換()'這裏的目的是什麼? –

+0

我可以使用3個函數和正則表達式。 match(),replace()和tokenize()。 replace()的目的是通過用uri替換整個文本內容來從整個文本中提取uri。 matches()返回true或false。而tokenize函數根據正則表達式分割一個字符串。我也可以使用analyze-string()而不是replace() – voyager

+0

如果你想提取一個匹配正則表達式的特定子字符串,那麼你應該考慮使用'xsl:analyze-string'而不是'replace',參見http:// www.w3.org/TR/xslt20/#analyze-string –

回答

1

好的人,我知道正則表達式是遠遠不夠完善,但對我來說,以下工作:

<xsl:analyze-string 
    select="$elValue" 
    regex="((https?|ftp|gopher|telnet|file):(()|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&amp;]*\w*.\w*\W\w*\W\w*\W\d.\d\W)">      
     <xsl:matching-substring> 
      <xsl:value-of select="regex-group(1)"/>      
     </xsl:matching-substring> 
</xsl:analyze-string> 
相關問題