как получить строку после определенного появления разделителя строк? - PullRequest
2 голосов
/ 23 августа 2011

Например, у меня есть этот xml:

<ns5:folio><ns5:portfolioName ns5:portfolioNameScheme="test">ROOT:B1:B2:B3:B4:B5:B6</ns5:portfolioName></ns5:folio>

И я хочу, чтобы xslt нашел строку после 4-го: и до 5-го: B4.

Как я могусделать это?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 23 августа 2011

В XSLT / XPath 2.0 вы можете использовать tokenize():

tokenize($x, ':')[5]
2 голосов
/ 23 августа 2011

Посмотрите на substring-before и substring-after.

<xsl:variable name="x">ROOT:B1:B2:B3:B4:B5:B6</xsl:variable>
<xsl:value-of select="substring-before(substring-after(substring-after(substring-after(substring-after($x, ':'), ':'), ':'), ':'), ':')"/>
1 голос
/ 24 августа 2011

Помимо хорошего ответа @LarsH (+1), если вы застряли с XSLT 1.0, вы можете использовать функцию / шаблон str-split-to-words FXSL :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common">
   <xsl:import href="strSplit-to-Words.xsl"/>

   <xsl:output indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="/">
      <xsl:variable name="vwordNodes">
        <xsl:call-template name="str-split-to-words">
          <xsl:with-param name="pStr" select="/"/>
          <xsl:with-param name="pDelimiters" 
                          select="':'"/>
        </xsl:call-template>
      </xsl:variable>

      <xsl:value-of select="ext:node-set($vwordNodes)/*[5]"/>
    </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML (с добавленным определением пространства имен, чтобы сделать его правильно сформированным):

<ns5:folio xmlns:ns5="unknown!!!" >
    <ns5:portfolioName ns5:portfolioNameScheme="test">ROOT:B1:B2:B3:B4:B5:B6</ns5:portfolioName>
</ns5:folio>

желаемый, правильный результат получается :

B4

Do note : Это решение очень простое в использовании (просто измените [5] на [1000]) в случае, если нам нужно извлечь 1000-й компонент в строке, разделенной двоеточиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...