XPATH: Кто игрок, набравший наибольшее количество очков в матче? - PullRequest
1 голос
/ 09 апреля 2020

У меня XML, и мне нужен игрок, набравший наибольшее количество очков в матче в xpath.

<?xml version="1.0" encoding="UTF-8"?>
    <match>
        <summary>
            <team name="Barça" score="7">
                <scorecard>
                    <name points="1">Iniesta</name>
                    <name points="2">Suarez</name>
                    <name points="4">Messi</name>
                </scorecard>
            </team>
            <team name="Madrid" score="26">
                <scorecard>
                      <name points="3">Ronaldo</name>
                      <name points="1">Buitre</name>
                      <name points="2">Bale</name>
                </scorecard>
            </team>
        </summary>
    </match>

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

@ Ответ Чоробы просто в порядке. Решение XPath 2.0:

 //name[@points=max(//name/@points)]/text()

Вывод: Messi

EDIT: удалено отличное значение. Спасибо @Michael Kay.

0 голосов
/ 09 апреля 2020

Если у вас Saxon (PE или выше), то

saxon:highest(//name, function($team) { +$team!@points })

должно быть самым быстрым решением.

0 голосов
/ 09 апреля 2020
/match/summary/team/scorecard/name[
    not(@points < /match/summary/team/scorecard/name/@points)
]/text()

Значение: найти игрока таким, чтобы нигде не было очков больше его.

Протестировано с

xmllint -xpath '/match/summary/team/scorecard/name[not(@points < /match/summary/team/scorecard/name/@points)]/text()' ~/file.xml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...