我有一个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.>
我想检索(例如)最老的状态(即“多佛”)的资本。 我已经设法搞到这个地步:
//STATES/STATE[DATEOFSTATEHOOD='7 December 1787']/CAPITAL/text()
但无法弄清楚如何说“DATEOFSTATEHOOD = {最早DATEOFSTATEHOOD}”。
请问有人可以指点我正确的方向吗?
解决方案:马特的解决方案或多或少是现货。我不得不重新格式化日期(我使用YYYYMMDDD),因为正如所指出的那样,Xpath 1.0不支持我使用的日期格式。另外,微软的XML库(4.0和6.0)用Matt的表达式返回了整个节点列表。反转测试解决了这个问题,使得它只返回最早的节点。
所以:
//STATES/STATE[(DATEOFSTATEHOOD < //STATES/STATE/DATEOFSTATEHOOD)]/CAPITAL/text()
我有日期格式的控制执行这一点,所以我会试试,谢谢。 – gkrogers 2010-06-10 09:20:50
我发现您的表达式在联机表达式测试器中工作,但不在Microsoft的XML库中。但是,将其更改为//州/州[(DATEOFSTATEHOOD/州/州/ DATEOFSTATEHOOD)]/CAPITAL/text()做了tritck--谢谢! – gkrogers 2010-06-10 14:56:59