如何使用XPath选择具有最长子#text节点值的XML节点?

如何使用XPath选择具有最长子#text节点值的XML节点?,第1张

概述在使用此查询之前,我已使用XPath选择具有最大整数id值的节点: //somenode[not(@id <= preceding::somenode/@id) and not(@id <= following::somenode/@id)] 我希望我可以做类似的事情: //entry[not(string-length(child::text()) <= string-length(preced 在使用此查询之前,我已使用XPath选择具有最大整数ID值的节点:
//somenode[not(@ID <= preceding::somenode/@ID) and not(@ID <= following::somenode/@ID)]

我希望我可以做类似的事情:

//entry[not(string-length(child::text()) <= string-length(preceding::entry/child::text())) and not(string-length(child::text()) <= string-length(following::entry/child::text()))]

但它返回一堆节点而不是一个节点.

示例XML:

<xml>  <entry>Lorem ipsum dolor sit amet,consectetur adipiscing elit.</entry>  <entry>Nam dignissim mi a massa mattis rutrum eu eget mauris.</entry>  <entry>Ut at diam a sem scelerisque pretium nec pulvinar purus.</entry>  <entry>Nunc in nisi nec dolor accumsan suscipit vel a quam.</entry>  <entry>Nunc suscipit lobortis arcu,nec adipiscing libero bibendum nec.</entry>  <entry>Aenean eget ipsum et nunc eleifend scelerisque.</entry>  <entry>In eu magna et diam volutpat molestIE.</entry>  <entry>In volutpat luctus mi,eu laoreet orci dictum vel.</entry>  <entry>In mattis mi nec magna soDales eu bibendum felis aliquet.</entry><!-- etc for 800 more lines or so -->  <entry>Duis auctor felis ID neque gravida ut auctor ipsum ullamcorper.</entry>  <entry>Sed vel tortor mauris,et aliquet tellus.</entry></xml>

XPath测试:http://chris.photobooks.com/xml/default.htm?state=1o

解决方法 无法使用单个XPath 1.0表达式选择有用元素,因为在XPath 1.0中,无法将函数应用于所有选定节点(字符串长度(someNodeSet)仅应用于此节点的第一个节点 – 组).另一个原因是在XPath 1.0中,无法命名和引用范围变量.

在XPath 2.0中,这是微不足道的:

/*/entry[not(string-length(.) &lt; /*/entry/string-length(.))]

以上选择所有入口元素,其字符串值的长度是最大值.

/*/entry[not(string-length(.) &lt; /*/entry/string-length(.))] [1]

以上选择了第一个(按文档顺序)这样的入口元素.

基于XSLT 2.0的验证:

这种转变:

<xsl:stylesheet version="2.0"    xmlns:xsl="http://www.w3.org/1999/XSL/transform"> <xsl:template match="/">  <xsl:sequence select=   "/*/entry[not(string-length(.) &lt; /*/entry/string-length(.))]"/> </xsl:template></xsl:stylesheet>

当应用于提供的XML文档时:

<xml>  <entry>Lorem ipsum dolor sit amet,et aliquet tellus.</entry></xml>

选择具有最大字符串长度的条目元素(在这种情况下只有一个)并输出所选元素:

<entry>Nunc suscipit lobortis arcu,nec adipiscing libero bibendum nec.</entry>
总结

以上是内存溢出为你收集整理的如何使用XPath选择具有最长子#text节点值的XML节点?全部内容,希望文章能够帮你解决如何使用XPath选择具有最长子#text节点值的XML节点?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1103746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存