从XML中提取一些数据

时间:2011-02-15 12:51:26

标签: xml xslt

<block1>
  <tag>
    <name>59</name>
    <value>/00940001812410930828 FONDITEL VALORES AV SAU ATAM PEDRO TEIXERIA 8 PLANTA 7A 28020MADRID
    </value>
  </tag>
</block1>

我需要输出为00940001812410930828 ,FONDITEL VALORES AV SAU ATAM PEDRO TEIXERIA 8 PLANTA 7A 28020MADRID

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

如果我没有遗漏任何东西,请尝试以下方法:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="//value">
        <xsl:value-of select="substring-after('/', normalize-space(.))"/>
    </xsl:template>
</xsl:stylesheet>

如果你想专注于字符串处理,你应该考虑改进你的xml标记而不是那个。否则使用xslt 1.0处理字符串值非常繁琐。 (如果您使用的是2.0,则会出现一个完全符合此目的的预定义函数列表(如fn:tokenize)。

答案 1 :(得分:1)

这个XPath表达式:

concat(
   substring-after(
      substring-before(
         /block1/tag/value,
         ' '
      ),
      '/'
   ),
   ' ,',
   substring-after(
      /block1/tag/value,
      ' '
   )
)

或者这个XSLT样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="value">
        <xsl:value-of select="substring-after(
                                 substring-before(
                                    /block1/tag/value,
                                    ' '
                                 ),
                                 '/'
                              )"/>
        <xsl:text> ,</xsl:text>
        <xsl:value-of select="substring-after(
                                 /block1/tag/value,
                                 ' '
                              )"/>
    </xsl:template>
</xsl:stylesheet>

一个简单的XPath 2.0表达式:

replace(/block1/tag/value,'/([^ ]* )(.*)','$1,$2')