【问题标题】:(Xpath) How do I get a specific numeric value?(Xpath) 如何获得特定的数值?
【发布时间】:2022-08-05 23:17:17
【问题描述】:

如何获得特定的数值?

example image

我怎样才能只得到数字“6”?

例如 \"ตอนที่ 6\" 我只需要输出 \"6\" 或 \" 6 \"

我尝试//li[@class=\'active\']/text() 获取简单的文本,但我不确定下一步该怎么做

  • 看看 substring-after。 IE。看到这个答案:stackoverflow.com/a/334251/3710053
  • 我尝试 //li[@class=\'active\']/text()[substring-after(., \'ตอนที่\')] 仍然输出 \"ตอนที่ 6\" :(
  • 方括号内的所有内容都称为谓词。它们的意思是 filter ,而不是给出结果。看@zx485的回答,怎么解决你的问题
  • 通过将 XML 作为图像发布,您可以确保没有人可以测试他们提出的答案以确保它有效。这可能就是您得到的答案对您不起作用的原因。
  • 看看如何只获取任何给定字符串中的数字 - 下面:)

标签: html xpath google-chrome-devtools xpath-2.0 xpath-1.0


【解决方案1】:

你可以试试这个 XPath-1.0 表达式:

normalize-space(substring-before(substring-after(//li[@class='active']/text(),'ตอนที่ '),'"'))

您还可以使用 XPath-2.0 的 fn:replace 函数来使用 RegEx 过滤字符串:

normalize-space(replace(//li[@class='active']/text(),'.*
\s*".*(\d+)\s*".*','$1'))

此 RegEx 可能需要进行调整。它由几个部分组成:

  1. .*
 匹配整个 "::before" 行
  2. \s*".* 匹配字符串 " ตอนที่
  3. (\d+) 选择一个或多个数字,然后用$1 复制到输出中
  4. \s*".* 匹配行的其余部分 " = 50

【讨论】:

  • 未选择文本或者我错过了什么? prnt.sc/83vzhFIVGn3J
  • 我在末尾添加了/text()。我对其进行了测试,但解析器之间有时存在微小差异。也许这确实工作得更好。
  • 如果这也不起作用,您可以尝试在 XPath 表达式的末尾附近添加[1]//li[@class='active'][1]/text()
  • 它仍然不起作用prnt.sc/3myMQCgHLac3
  • 你能提供XML吗?也许值是动态创建的。
【解决方案2】:

做到这一点的方法,甚至不知道那里可能有哪些非数字字符, 正在使用双翻译法

    translate(//li[@class='active']/text(),
              translate(//li[@class='active']/text(), '0123456789', ''),
              '')

解释

  1. 内部 translate(//li[@class='active']/text(), '0123456789', '') 在第一个参数中获取所有非数字字符。

  2. 外部translate() 将内部translate() 中的所有非数字字符替换为空字符串。

  3. 剩下的只是数字字符


    基于 XSLT 的验证

    鉴于这个简化的 XML 文档

    <t>ตอนที่ 6</t>
    

    以下转换评估正确的(解决方案)XPath 表达式并输出此评估的结果

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
    
      <xsl:template match="/*">
        <xsl:value-of select="translate(., translate(., '0123456789', ''), '')"/>
      </xsl:template>
    </xsl:stylesheet>
    

    产生了想要的结果

    6
    

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 2013-03-24
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多