none
WebMatrix - как объеденить данные из XML и SQL RRS feed

  • Вопрос

  • Есть у меня задача необходимо объеденить данные выводимые из базы MS SQL с XML. XML к комне приходит ввиде ответа на POST запрос. По отдельности у меня получаеться отображаеть данные вееб странице. Но закавыка в том что в XML есть динамические данные они меняються часто и сохранять их БД, а потом выводить не вариант.

    Подскажите как мне решить данную задачу? если можно пример кода. 


    • Изменено DrakonoffNet 8 апреля 2011 г. 17:36 уточнения
    8 апреля 2011 г. 17:30

Ответы

  • Есть множество вариации как ето можно сделать  :

    Если например Вы из базы данних получаете в  DataTable

    можно например создать такую функцию которая проходится по всем строкам вашеи таблицы

    и заменяет их на другие из XML

     private DataTable changDataInTable(DataTable dataTable)
      {
        string path = appPath + @"\App_Data\Xml\XMLEmailsLinks.xml";
    
        foreach (DataRow row in dataTable.Rows)
        {
    
          try
          {
            using (FileStream fStream = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
    
              document.Load(fStream);
              //поиск по вашему параметру из базы данных (linkId )
              XmlNode node = document.SelectSingleNode(String.Format("root/links/link[@id='{0}']", row["linkId"]));
              // и заменяете то что пришло из базы данных на то чем хотите заменить из XML
              row["FirstName"] = node.ChildNodes[0].InnerText;
              row["LastName"] = node.ChildNodes[1].InnerText;
    
            }
          }
          catch (Exception ex)
          {
            //GlobalFunc.SaveDataInLogFile(GlobalFunc.appPath + GlobalFunc.getConfigValue("LogFilePath"), "",
            //  new string[] { ex.Message, ex.StackTrace, "function getbodyTextFromXml - messages.aspx" });
          }
        }
        return dataTable;
      }
    
    e
    • Предложено в качестве ответа Abolmasov DmitryModerator 12 апреля 2011 г. 8:45
    • Помечено в качестве ответа DrakonoffNet 12 апреля 2011 г. 8:54
    12 апреля 2011 г. 8:12

Все ответы

  •  Я бы сделала ето так :


    1.Создать  класс с требуемуемими своиставами ,например:

    public class MyClass 
    { 
       
    public int Age {get; set;}  
    } 

    2. Создать функцию которая из sql  добавляет данние в  List<MyClass >

    можете посмотреть здесь :

    http://arstechnica.com/civis/viewtopic.php?f=20&t=1124282

    3. И сделать что- то наподобие из XML  в  List<MyClass >

    List<T> имеет такие функции как :Find ,Sort ...

    если вдруг Вам понадобится впоследствии отсортировать данные и т. д.

    http://msdn.microsoft.com/ru-ru/library/6sh2ey19.aspx


    Удачи!

    9 апреля 2011 г. 19:09
  • Спасибо за вариант. 

    но мне бы что то по попроще  для понимания.

    например используя 

    XElement root = XElement.Load("PurchaseOrders.xml");
    IEnumerable<XElement> purchaseOrders =
     from el in root.Elements("PurchaseOrder")
     where 
      (from add in el.Elements("Address")
      where
       (string)add.Attribute("Type") == "Shipping" &&
       (string)add.Element("State") == "NY"
      select add)
      .Any()
     select el;
    foreach (XElement el in purchaseOrders)<span style="white-space:pre">																			</span>
     Console.WriteLine((string)el.Attribute("PurchaseOrderNumber"));
    

     

    Взято: http://msdn.microsoft.com/ru-ru/library/bb387032.aspx 

    Наглядно понимаю что выбираю по одному или нескольким параметрам

    Ну а если (к примеру ) у меня выводиться новости и их на странице 25 шт. и они выводиться из базы. то тут у меня ступор. как для каждой новости мне необходимо подставить соответствующее значение из xml. как тут поступить?

    ведь @foreach из XML выведет мне масив значений а это не то

    или можно формить как с базой @foreach (var row in db.Query(MSSQL, ParametrFitra)) {} ?

    как реализовать подстановку значений, выбранных из XML, для каждой новости?

    При помощи jquery xml можно разобрать для каждой новости, но это будет выполняться в браузере пользователя 25 раз а это не есть

    правильно.


    • Изменено DrakonoffNet 11 апреля 2011 г. 13:15 не точность
    11 апреля 2011 г. 13:12
  • Есть множество вариации как ето можно сделать  :

    Если например Вы из базы данних получаете в  DataTable

    можно например создать такую функцию которая проходится по всем строкам вашеи таблицы

    и заменяет их на другие из XML

     private DataTable changDataInTable(DataTable dataTable)
      {
        string path = appPath + @"\App_Data\Xml\XMLEmailsLinks.xml";
    
        foreach (DataRow row in dataTable.Rows)
        {
    
          try
          {
            using (FileStream fStream = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
    
              document.Load(fStream);
              //поиск по вашему параметру из базы данных (linkId )
              XmlNode node = document.SelectSingleNode(String.Format("root/links/link[@id='{0}']", row["linkId"]));
              // и заменяете то что пришло из базы данных на то чем хотите заменить из XML
              row["FirstName"] = node.ChildNodes[0].InnerText;
              row["LastName"] = node.ChildNodes[1].InnerText;
    
            }
          }
          catch (Exception ex)
          {
            //GlobalFunc.SaveDataInLogFile(GlobalFunc.appPath + GlobalFunc.getConfigValue("LogFilePath"), "",
            //  new string[] { ex.Message, ex.StackTrace, "function getbodyTextFromXml - messages.aspx" });
          }
        }
        return dataTable;
      }
    
    e
    • Предложено в качестве ответа Abolmasov DmitryModerator 12 апреля 2011 г. 8:45
    • Помечено в качестве ответа DrakonoffNet 12 апреля 2011 г. 8:54
    12 апреля 2011 г. 8:12
  • Спасибо вам!

     

    12 апреля 2011 г. 8:58