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+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$]))")'/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="p/@xlink:href"/>
</xsl:stylesheet>
我使用的是不工作的,由於人物像撒克遜的正則表達式?
什麼的'替換()'這裏的目的是什麼? –
我可以使用3個函數和正則表達式。 match(),replace()和tokenize()。 replace()的目的是通過用uri替換整個文本內容來從整個文本中提取uri。 matches()返回true或false。而tokenize函數根據正則表達式分割一個字符串。我也可以使用analyze-string()而不是replace() – voyager
如果你想提取一個匹配正則表達式的特定子字符串,那麼你應該考慮使用'xsl:analyze-string'而不是'replace',參見http:// www.w3.org/TR/xslt20/#analyze-string –