我有一個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