Код XPath 1.0 выбирает неправильное максимальное значение - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь использовать XPath 1.0, чтобы выбрать максимальное двойное значение в документе XML. Я понимаю, что XPath 1.0 не поддерживает функцию Max, которая сделает это чрезвычайно простым, но система, которую я использую, поддерживает только функции XPath 1.0.

Из-за длины я не могу опубликовать весь файл, но вот образец сканируемого документа: https://codebeautify.org/xmlviewer/cbc93c7e.

Я пробовал это выражение XPath:

/site/forecast/datum[not(primary < preceding-sibling::datum/primary) and not (primary < following-sibling::datum/primary)]

Но несмотря ни на что, он возвращает неверные данные. Всегда возвращается:

<datum>
    <valid timezone="UTC">2019-04-04T06:00:00-00:00</valid>
        <primary name="Stage" units="ft">9.80</primary>
        <secondary name="Flow" units="cfs">3010.00</secondary>
        <pedts>HGIFE</pedts>
</datum>

Я ожидаю, что он вернет элемент с максимальным значением "начальной стадии", например:

<datum>
    <valid timezone="UTC">2019-03-28T18:00:00-00:00</valid>
        <primary name="Stage" units="ft">13.10</primary>
        <secondary name="Flow" units="cfs">13400.00</secondary>
        <pedts>HGIFE</pedts>
</datum>

Я понимаю, что вернутся все те, у кого начальная стадия 13.10, но это нормально. Я выберу первый, который он вернет, если смогу просто добраться до этой точки.

1 Ответ

0 голосов
/ 27 марта 2019

Обратите внимание, что у вас может быть более одного максимума. Использование:

/site/forecast/datum[not(primary < ../datum/primary)][1]

Это выберите элемент

<datum> 
  <valid timezone="UTC">2019-03-28T18:00:00-00:00</valid>  
  <primary name="Stage" units="ft">13.10</primary>  
  <secondary name="Flow" units="cfs">13400.00</secondary>  
  <pedts>HGIFE</pedts> 
</datum>

Проверьте это в http://www.xpathtester.com/xpath/4256aac47f4f0efc36e23a2f16183d90

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...