我将xml作为字符串加载到DataTable中。
以下是我目前用于遍历DataTable中的行的代码:
foreach (DataTable table in ds.Tables)
{
foreach (DataRow row in table.Rows)
{
XmlDocument auction_31_xml = new XmlDocument();
if(!string.IsNullOrEmpty(row[auctions_31].ToString()))
{
auction_31_xml.LoadXml(row[auctions_31].ToString());
var x = auction_31_xml.SelectNodes("//AUCTION[AUCTION_DATE>20070111 and AUCTION_DATE<2013930]");
auction_count_31 += x.Count;
}
}
}
以下是XML的结构:
<AUCTIONS>
<AUCTION AUCTION_ID="235342">
<AUCTION_DATE>2007-06-29</AUCTION_DATE>
<AUCTION_TIME>12:00P</AUCTION_TIME>
<RENTAL_AUCTION_STATUS>1</RENTAL_AUCTION_STATUS>
<UNIT_CONTENTS/>
<SOLD_AMOUNT/>
<TAX_COLLECTED/>
<BUYER_TAX_EXEMPT/>
<BUYER_TAX_EXEMPT_NUM/>
<SOLD_TO>Unavailable</SOLD_TO>
<NOTES/>
</AUCTION>
<AUCTION AUCTION_ID="228371">
<AUCTION_DATE>2006-11-30</AUCTION_DATE>
<AUCTION_TIME>04:30PM</AUCTION_TIME>
<RENTAL_AUCTION_STATUS>1</RENTAL_AUCTION_STATUS>
<UNIT_CONTENTS/>
<SOLD_AMOUNT/>
<TAX_COLLECTED/>
<BUYER_TAX_EXEMPT/>
<BUYER_TAX_EXEMPT_NUM/>
<SOLD_TO>Unavailable</SOLD_TO>
<NOTES/>
</AUCTION>
我要做的是计算2007年1月11日至2013年9月30日期间AUCTION_DATE的所有AUCTION元素。
我拥有的XPATH表达式是:
var x = auction_31_xml.SelectNodes("//AUCTION[AUCTION_DATE>20070111 and AUCTION_DATE<2013930]");
非常感谢任何帮助。
答案 0 :(得分:2)
您需要使用number(translate(the_date,'-',''))
将XML中的日期转换为与比较数字格式相同的数字:
//AUCTION
[
number(translate(AUCTION_DATE,'-',''))>20070111
and
number(translate(AUCTION_DATE,'-',''))<20130930
]
在这个问题中给定输入XML,上面的XPath(为了便于阅读而格式化)能够返回XPath测试器中的第一个<AUCTION>
节点。
答案 1 :(得分:0)
您是否尝试将竞价元素反序列化为一个列表,然后使用Select(x =&gt; x.AuctionDate满足条件)等扩展方法来获取所需的竞价?