位數我有這樣的XML,XSLT - 正則表達式只選擇一個從文本()節點
<section>
<para>height 4cm, width 5cm, weight 343</para>
<para>height 2cm, width 6cm, weight 410</para>
<para>height 3cm, width 1cm, weight 590</para>
</section>
這裏我需要加倍para/text()
的單個數字。所需的輸出應該看起來像,
<section>
<para>height 8cm, width 10cm, weight 343</para>
<para>height 4cm, width 12cm, weight 410</para>
<para>height 6cm, width 2cm, weight 590</para>
</section>
要做到這一點我有這樣的一個模板,
<xsl:template match="para/text()">
<xsl:analyze-string select="." regex="\d">
<xsl:matching-substring>
<xsl:value-of select="2 * number(.)"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
這裏的問題是一個雙本,這需要無一位數字爲一位數他們,
電流輸出,
<section>
<para>height 8cm, width 10cm, weight 686</para>
<para>height 4cm, width 12cm, weight 820</para>
<para>height 6cm, width 2cm, weight 10180</para>
</section>
任何建議,我怎麼能解決這個問題?
您可以使用'「\ b \ d \ b」'來匹配單個數字的整數。但是,這不會考慮上下文(您可能有興趣更改所有'cm'單元值 - 然後使用'\ d + cm'表達式在下面使用答案)。 –
@stribizhev我不確定'\ b'在XSLT中是否被允許,我得到:'正則表達式中的錯誤:net.sf.saxon.trans.XPathException:在 處的語法錯誤正則表達式中的字符2:轉義字符'b '不允許'。 –
@MathiasMüller:你說得對。我在官方文檔中查找,但是在這裏找到:) [如何使用XSLT 2在文本中查找單詞。0和REGEX(它沒有\ b字邊界)?](http://stackoverflow.com/questions/2397574/how-to-find-a-word-within-text-using-xslt-2-0 -and-正則表達式-其中-犯規具備的,體重)。不過,如果你打算在'cm'之前匹配數字,你不需要限制爲只有一位數。 –