BBQ*_*BBQ 3 xml xslt xpath stylesheet
<Description>this is my value 822880494 this is my value</Description>
Run Code Online (Sandbox Code Playgroud)
我是xpath,xml和stylevision的新手,所以这可能是一个基本问题.
我正在使用stylevision 2010和xpath为模式创建sps/xslt.
在上面的节点中,您可以看到节点内部有一个数值,我想提取该值并将其转换为我的pdf/html中的链接.问题是我似乎无法提取它.子字符串不是一个选项,因为值的长度和其中数值的位置会有所不同.
有些人可能认为模式组合严重,数值应该在一个单独的节点/属性/ ...中我无能为力,因为这个模式是由另一家公司提供的.
提前致谢!
Dim*_*hev 14
使用这个简单的XPath 1.0表达式:
translate(.,translate(., '0123456789', ''), '')
Run Code Online (Sandbox Code Playgroud)
这是一个完整的XSLT 1.0解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:value-of select=
"translate(.,translate(., '0123456789', ''), '')"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
当此转换应用于提供的XML文档时:
<Description>this is my value 822880494 this is my value</Description>
Run Code Online (Sandbox Code Playgroud)
产生了想要的正确结果:
822880494
Run Code Online (Sandbox Code Playgroud)
说明:
这被称为迈克尔凯首次提出的双翻译方法.它由两个嵌套的translate()函数调用组成:
内心的translate().这将生成字符串的所有字符,但数字除外.
外面的translate().这将从字符串中删除内部生成的所有字符translate().剩下的只是想要的字符(数字).
StyleVision 2010似乎支持XSLT 2.0,因此您可以使用2.0样式表并执行类似的操作
<xsl:analyze-string select='$foo' regex='\d+'>
<xsl:matching-substring>
<number><xsl:value-of select='.' /></number>
</xsl:matching-substring>
</xsl:analyze-string>
Run Code Online (Sandbox Code Playgroud)
或者你想用这个号码做什么; 带有数字的字符串是元素内的上下文<xsl:matching-substring>元素.
Newtover的translate想法(对于XSLT 1.0)看起来像这样:
<xsl:value-of select="translate(., translate(., '0123456789', ''), '')" />
Run Code Online (Sandbox Code Playgroud)
但是如果你的输入包含多个数字,那么只需将它们连接起来.
| 归档时间: |
|
| 查看次数: |
12058 次 |
| 最近记录: |