У меня есть XML-фрагмент, так:выражение Xpath, чтобы получить самый старый/ранний узел
<STATES>
<STATE>
<NAME>Alabama</NAME>
<ABBREVIATION>AL</ABBREVIATION>
<CAPITAL>Montgomery</CAPITAL>
<POPULATION>4661900</POPULATION>
<AREA>52419</AREA>
<DATEOFSTATEHOOD>14 December 1819</DATEOFSTATEHOOD>
</STATE>
<STATE>
<NAME>Alaska</NAME>
<ABBREVIATION>AK</ABBREVIATION>
<CAPITAL>Juneau</CAPITAL>
<POPULATION>698473</POPULATION>
<AREA>663268</AREA>
<DATEOFSTATEHOOD>1 January 1959</DATEOFSTATEHOOD>
</STATE>
<STATE>
<NAME>Delaware</NAME>
<ABBREVIATION>DE</ABBREVIATION>
<CAPITAL>Dover</CAPITAL>
<POPULATION>885122</POPULATION>
<AREA>2490</AREA>
<DATEOFSTATEHOOD>7 December 1787</DATEOFSTATEHOOD>
</STATE>
</STATES>
<etc, etc.>
Я хочу, чтобы получить (например) капитал старейшего государства (т.е. «Dover»). мне удалось получить это далеко:
//STATES/STATE[DATEOFSTATEHOOD='7 December 1787']/CAPITAL/text()
, но не могу понять, как сказать «DATEOFSTATEHOOD = {самый ранний DATEOFSTATEHOOD}».
Может кто-нибудь указать мне в правильном направлении, пожалуйста?
РЕШЕНИЕ: Решение Мэтта находится на более или менее месте. Мне пришлось переформатировать даты (я использовал YYYYMMDDD), потому что, как было указано, Xpath 1.0 не поддерживает формат даты, который я использовал. Кроме того, XML-библиотека Microsoft (4.0 и 6.0) вернула весь список узлов с выражением Мэтта. Реверсирование теста устраняет эту проблему, заставляя ее возвращать только самый ранний узел.
Итак:
//STATES/STATE[(DATEOFSTATEHOOD < //STATES/STATE/DATEOFSTATEHOOD)]/CAPITAL/text()
У меня есть контроль над форматом даты, так что я буду попробуйте, спасибо. – gkrogers
Я обнаружил, что ваше выражение работает в онлайн-тестере выражений, но не в XML-библиотеке Microsoft. Однако, изменив его на // STATES/STATE [(DATEOFSTATEHOOD/ STATES/STATE/DATEOFSTATEHOOD)]/CAPITAL/text() сделал tritck - спасибо! – gkrogers