2014-10-21 2 views
1

Я работаю над приложением ASP.Net MVC. В моем приложении у меня есть xml-файл, в котором я сохраняю информацию, которая будет доступна для следующего запуска приложения..NET читает XML и выбирает элементы на основе условия

Вот образец XML:

<data> 
    <event> 
    <id><![CDATA[38079482]]></id> 
    <start_date><![CDATA[2014-10-21 09:45]]></start_date> 
    <end_date><![CDATA[2014-10-21 11:00]]></end_date> 
    <text><![CDATA[38079482]]></text> 
    <engineer_id><![CDATA[20602]]></engineer_id> 
    <color><![CDATA[#00CCCC]]></color> 
    <status><![CDATA[Dispatched]]></status> 
    <customer><![CDATA[Reed Hayes]]></customer> 
    <number><![CDATA[689-761-834 ]]></number> 
    <category><![CDATA[N/A]]></category> 
    </event> 
    <event> 
    <id><![CDATA[38129667]]></id> 
    <start_date><![CDATA[2014-10-20 11:20]]></start_date> 
    <end_date><![CDATA[2014-10-20 13:00]]></end_date> 
    <text><![CDATA[38129667]]></text> 
    <engineer_id><![CDATA[20525]]></engineer_id> 
    <color><![CDATA[Red]]></color> 
    <status><![CDATA[Cancelled]]></status> 
    <customer><![CDATA[Gervase Griffin]]></customer> 
    <number><![CDATA[400-401-401 ]]></number> 
    <category><![CDATA[N/A]]></category> 
    </event> 
</data> 

В моем контроллере, я хотел бы разобрать этот файл и отправлять только «событие» элементы на мой взгляд, которые имеют «START_DATE» для сегодняшней текущей даты ,

метод Controller выглядит следующим образом до сих пор:

public void gatherXML() 
{ 
    string path = HttpContext.Server.MapPath("~/Content/Tasks.xml"); 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(path); 
    doc.PreserveWhitespace = true; 

    ViewBag.xml = doc.InnerXml; 
} 
+0

Что ваше вопрос? – Christian

+0

Я хотел бы проанализировать мой XML-файл, чтобы получить только те элементы, чья start_date является текущей текущей датой. –

+1

Вам нужен LINQ to XML –

ответ

1

Вы можете использовать LINQ к XML запрашивать структуру XML и получить только необходимые элементы.

Вот пример, чтобы найти элементы с определенной датой:

var doc = XDocument.Load("XMLFile1.xml"); 

var res = new XDocument 
    (new XElement("data", 
     (from i in doc.Root.Elements() 
     where i.Element(XName.Get("start_date")).Value == "2014-10-21 09:45" 
     select i))); 

var xml = res.ToString(); // Reduced XML containing only the matching element 

Вы можете также использовать XPath и старшим XmlDocument API для запроса документа:

var xdoc = new XmlDocument(); 
xdoc.Load("XMLFile1.xml"); 
XmlNode root = xdoc.DocumentElement; 

// Select the nodes that match the date condition 
XmlNodeList node = root.SelectNodes(
    "descendant::event[start_date='2014-10-21 09:45']"); 
+0

спасибо за сообщение, я попробую это решение как можно скорее –

+0

спасибо, первое решение работает безупречно! Мне просто нужно упорядочить часть своего кода, прежде чем отправить его на просмотр прямо сейчас! –

+1

Я рад, что это сработало для вас :) –

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