2012-08-13 5 views
1

Мой XML: http://www.lakelandcollege.ca/rustlers/all-news.xmlКак выбрать узлы на основе диапазона дат в xpath?

я выбирал стоит год из элементов узлов, используя этот код:


XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(Server.MapPath("/rustlers/all-news.xml")); 
DataListArchive.DataSource = xmlDoc.SelectNodes("/items/item[contains(date,'2011')]"); 
DataListArchive.DataBind(); 

Но теперь мне нужно выбрать пункт узлов, где дата КСТАТИ 01-Апрель-2011 и 31 -Mar-2012. Как преобразовать дату в XML в значение реальной даты и сравнить ее с диапазоном?

Я хотел бы что-то вроде:


XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(Server.MapPath("/rustlers/all-news.xml")); 
DataListArchive.DataSource = xmlDoc.SelectNodes("/items/item[date between '01-APR-2011' and '31-MAR-2012']"); 
DataListArchive.DataBind(); 
+1

Это не может быть сделано с помощью одного выражения XPath 1.0. Вас интересует решение XSLT 1.0 или XSLT 2.0? –

+0

Вы имеете в виду между 1 марта и 30 апреля? – MiMo

+0

Я должен был быть более конкретным. Я хочу вернуть элементы узлов, где дата - битка 01-ап-2011 и 31 марта 2012 года. Да Меня интересует решение XSLT 1.0 или 2.0. –

ответ

2

Там нет общего способа преобразовать строку в дату, ни манипулировать даты в XPath 1.0 - для вашего конкретного случая (проверка, если дата в марте или апреле конкретный год):

/items/item[(contains(date,'April') or contains(date,'March')) and contains(date,'2010')] 

* UPDATE *

Увидев код, я бы сказал, что самый простой способ состоит в используйте XPath для получения всех элементов item, а затем выполните фильтрацию с помощью C# - i.e получите значение подэлемента date, преобразуйте его в дату-время, используя DateTime.Parse, а затем выполните сравнение в коде C#.

Можно добавить функции расширения в .NET XPath, чтобы сделать то, что вам нужно (см. this), но это довольно сложно и, вероятно, не стоит усилий в этом случае.

+1

. Я обновил свой вопрос, чтобы уточнить его в отношении дат. Также есть Xpath 2.0? –

+0

добавил мой код C# –

+2

Да, есть XPath (и XSLT) 2.0, но стандартные библиотеки .NET реализуют только стандарты 1.0 - для использования 2.0 вам необходимо использовать стороннюю библиотеку, такую ​​как Saxon. – MiMo

Смежные вопросы