xml – 如何应用XPath函数“substring-after”

前端之家收集整理的这篇文章主要介绍了xml – 如何应用XPath函数“substring-after”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是XPath表达式,我将用于获取每个书的“HarryPotter:”后面的字符串。

即。给定这个XML:

  1. <bookstore>
  2. <book>
  3. HarryPotter:Chamber of Secrets
  4. </book>
  5. <book>
  6. HarryPotter:Prisoners in Azkabahn
  7. </book>
  8. </bookstore>

我会回来:

  1. Chamber of Secrets
  2. Prisoners in Azkabahn

我已经尝试过这样的事情:

  1. /bookstore/book/text()[substring-after(.,'HarryPotter:')]

我认为我的语法不正确…

在XPath 2.0中,这可以通过单个XPath表达式生成

/ * / * / substring-after(。,’HarryPotter:’)

在这里,我们使用XPath 2.0的非常强大的功能,在位置步骤的末尾,我们可以放置一个函数,并且该函数将应用于当前结果集中的所有节点。

在XPath 1.0中,没有这样的功能,这在一个XPath表达式中无法实现。

我们可以执行如下的XSLT转换:

  1. <xsl:stylesheet version="1.0"
  2. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:output method="text"/>
  4.  
  5. <xsl:template match="/">
  6. <xsl:for-each select="/*/*[substring-after(.,'HarryPotter:')]">
  7. <xsl:value-of select=
  8. "substring-after(.,'HarryPotter:')"/>
  9. <xsl:text>&#xA;</xsl:text>
  10. </xsl:for-each>
  11. </xsl:template>
  12. </xsl:stylesheet>

应用于原始XML文档时:

  1. <bookstore>
  2. <book> HarryPotter:Chamber of Secrets </book>
  3. <book> HarryPotter:Prisoners in Azkabahn </book>
  4. </bookstore>

这个转换产生了想要的结果:

密室阿兹卡班的囚犯

猜你在找的XML相关文章