XPath 1.0从XML获取最高日期

XPath 1.0从XML获取最高日期,xpath,Xpath,在XML文件中,我有许多日期字段。我需要找出哪一个是最高值。不幸的是,我必须使用XPath1.0,因此没有一种简单的方法来实现 我从以下XML开始: <root> <value>20120103</value> <value>20130103</value> <value>20120101</value> <value>20140103</value>

在XML文件中,我有许多日期字段。我需要找出哪一个是最高值。不幸的是,我必须使用XPath1.0,因此没有一种简单的方法来实现

我从以下XML开始:

<root>
    <value>20120103</value>
    <value>20130103</value>
    <value>20120101</value>
    <value>20140103</value>
    <value>20100103</value>
</root>

20120103
20130103
20120101
20140103
20100103
由此,我可以通过以下xpath语句获得最高值:

/root/value[not(text() <= preceding-sibling::value/text()) and not(text() <=following-sibling::value/text
())]
/root/value[not(concat(concat(substring(text(),1,4),substring(text(),6,2)),substring(text(),9,2)) <= preceding-sibling::value/concat(concat(substring(text(),1,4),substring(text(),6,2)),substring(text(),9,2))) and not
(concat(concat(substring(text(),1,4),substring(text(),6,2)),substring(text(),9,2)) <=following-sibling::value/concat(concat(substring(text(),1,4),substring(text(),6,2)),substring(text(),9,2)))]

/root/value[not(text()实际上,您的第一个XPath

/root/value[not(text() <= preceding-sibling::value/text()) and not(text() <=following-sibling::value/text())]

/root/value[not(text()这不能通过单个XPath 1.0表达式确定,因为

max(/*/*/xs:date(.))
  • 在XPath1.0中,字符串没有
    运算符

  • 尽管可以使用
    translate()
    从上下文节点中删除连字符,但在单个XPath 1.0表达式中不可能将其与所有其他值进行比较,因为每个值都经历了相同的转换

  • XPath 2.0解决方案

    max(/*/*/xs:date(.))
    

    在XPath2中确实如此,但在XPath1中,我只得到5个结果(所有日期)Beni,在XPath 1.0中没有
    谢谢,我相信你是对的,我在web上找到了很多不同的解决方案,但是没有一个能与XPath 1.0一起使用。我想我必须向软件供应商索要一个实现XPath的版本2@ErikL,不客气。您可以实现自己的扩展功能,或者更好,开始使用X路径2.0。
    
    (/root/value[not(text() < preceding-sibling::value/text()) and not(text() < following-sibling::value/text())])[1]
    
    max(/*/*/xs:date(.))