在 XML 文件中,我有许多日期字段。我需要找出哪一个是最高值。不幸的是,我必须使用 XPath 1.0,所以没有一种简单的方法可以做到这一点。
我从这个 XML 开始:
<root>
<value>20120103</value>
<value>20130103</value>
<value>20120101</value>
<value>20140103</value>
<value>20100103</value>
</root>
由此,我可以使用此 xpath 语句获得最高值:
/root/value[not(text() <= preceding-sibling::value/text()) and not(text() <=following-sibling::value/text
())]
然而,我正在使用的真正的 XML 有这样的日期字段:
<root>
<value>2012-01-03</value>
<value>2013-01-03</value>
<value>2012-01-01</value>
<value>2014-01-03</value>
<value>2010-01-03</value>
</root>
要执行相同的 XPath,我必须使用 substring 和 concat 来删除减号。但是,我使用 XPath 的应用程序和 Oxygen XML 编辑器告诉我 concat 和 substring 不是 Xpath 1.0 函数(尽管有几页告诉我它们是......)
当我告诉 Oxygen 它是 Xpath 2.0 时,我可以使用以下语句获取值:
/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)))]
任何想法为什么它不能与 Xpath 1.0 一起使用以及我如何解决这个问题?
编辑:
我以为我通过使用 translate 来删除减号越来越近了:
/root/value[not(translate(text(),'-','') <= translate(preceding-sibling::value/text(),'-','')) and not(translate(text(),'-','') <=translate(following-sibling::value/text(),'-','')
)]
但出于某种原因,这会产生两个值:
2013-01-03 2014-01-03
虽然我只期待第二个