RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 794147
Accepted
gregor
gregor
Asked:2020-03-06 04:07:36 +0000 UTC2020-03-06 04:07:36 +0000 UTC 2020-03-06 04:07:36 +0000 UTC

如何仅提取某个字符后的数字?

  • 772

有一个节点,内容如下

<item is_json_array="yes">
  <name>Дополнительная услуга Количество IP-адресов - 1 Шт (Размещение сервера 1U #817)</name>
  <amount>156.48</amount>
  <taxrate>0</taxrate>
  <taxamount>0.00</taxamount>
  <notaxamount>156.48</notaxamount>
</item>

我需要name在符号后撕掉一个仅包含数字的子字符串,#即 817到第一个非数字字符或字符串的结尾。可以有任意数量的数字字符。xslt 1.0

xslt
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    Anton Shchyrov
    2020-03-06T05:31:07Z2020-03-06T05:31:07Z

    可能最简单的事情是

    <xsl:template name="extractNum">
      <xsl:param name="str"/>
      <xsl:param name="delimiter"/>
      <!-- Получаем строку после разделителя -->
      <xsl:variable name="tail" select="substring-after($str, $delimiter)" />
      <!-- все цифры в строке заменяем на 0 -->
      <xsl:variable name="mask" select="translate($tail, '123456789', '000000000')" />
      <xsl:variable name="cnt">
        <!-- считаем, сколько нулей идет в начале строки -->
        <xsl:call-template name="countNum">
          <xsl:with-param name="str" select="$mask"/>
        </xsl:call-template>
      </xsl:variable>
      <!-- вырезаем подстроку, согласно подсчитанному количеству цифр -->
      <xsl:value-of select="substring($tail, 1, $cnt)" />
    </xsl:template>
    
    <!-- подсчет количества символов '0' в строке str, начиная с позиции idx -->
    <xsl:template name="countNum">
      <xsl:param name="str"/>
      <xsl:param name"idx" select="1"/>
      <!-- получаем символ в текущей позиции -->
      <xsl:variable name="char" select="substring($str, $idx, 1)" />
      <xsl:choose>
        <!-- если это '0' -->
        <xsl:when test="$char = '0'">
          <!-- то вызываем шаблон рекурсивно для следующей позиции -->
          <xsl:call-template name="countNum">
            <xsl:with-param name="str" select="$str"/>
            <xsl:with-param name"idx" select="$idx + 1"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <!-- иначе выводим индекс предыдущего символа -->
          <xsl:value-of select="$idx - 1"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    
    <xsl:call-template name="extractNum">
      <xsl:with-param name="str" select="name"/>
      <xsl:with-param name="delimiter" select="'#'"/>
    </xsl:call-template>
    
    • 2
  2. gregor
    2020-03-06T05:37:36Z2020-03-06T05:37:36Z

    找到这个选项

    <xsl:template match="name">
      <xsl:value-of select="translate(substring-after(.,'#'),translate(substring-after(.,'#'),'0123456789',''),'')"/>
    </xsl:template>
    

    解决方案

    • 1
  3. VDV
    2020-03-06T15:24:07Z2020-03-06T15:24:07Z

    是的,在@Anton Shchyrov 建议的变量中,可能值得在第一个空格中添加一个截止值substring-before(substring-after(.,'#'), ' ')

    • -2

相关问题

  • 关于 XSLT 规则的帮助

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5