gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:58:40 24 4
gpt4 key购买 nike

在使用此查询之前,我已使用 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 中不可能将函数应用于所有选定的节点(string-length( someNodeSet) 仅应用于此节点集的第一个节点)。另一个原因是在 XPath 1.0 中无法命名和引用范围变量。

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

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

上面选择了所有entry元素,其字符串值的长度是最大的。

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

上面选择第一个(按文档顺序)这样的 entry 元素。

基于 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, 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>

选择具有最大字符串长度的 entry 元素(在本例中只有一个)并输出所选元素:

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

关于xml - 如何使用 XPath 选择具有最长子 #text 节点值的 XML 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7923238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com