我有一个 XML 片段,所以:
<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.>
我想检索(例如)最古老的州(即“多佛”)的首都。我设法做到了这一点:
//STATES/STATE[DATEOFSTATEHOOD='7 December 1787']/CAPITAL/text()
但不知道怎么说'DATEOFSTATEHOOD={最早的DATEOFSTATEHOOD}'。
有人可以指出我正确的方向吗?
解决方案:马特的解决方案或多或少是正确的。我不得不重新格式化日期(我使用了 YYYYMMDDD),因为正如所指出的,Xpath 1.0 不支持我使用的日期格式。此外,Microsoft 的 XML 库(4.0 和 6.0)返回了带有 Matt 表达式的整个节点列表。逆向测试解决了该问题,使其仅返回最早的节点。
所以:
//STATES/STATE[(DATEOFSTATEHOOD < //STATES/STATE/DATEOFSTATEHOOD)]/CAPITAL/text()