2012-07-01 49 views
1

我有一個C#MVC應用,我需要輸出如下的數據到一個視圖:C#MVC:如何從XML提取物值,並通過查看

  <versions> 
       <product>true</product> 
       <type>city</type> 
       <factory name="Demme" url="http://test1.com" thumbnail="http://test3.com/img1" interval="10" /> 
       <factory name="Vollick" url="http://test2.com" thumbnail="http://test3.com/img1" interval="10" /> 
       <factory name="Tony" url="http://test3.com" thumbnail="http://test3.com/img1" interval="10" /> 
      </versions> 

上述數據來自一個SQL表/列它將數據存儲爲XML數據類型。 可以somone給我一個代碼示例來提取元素的值(也許將每個值賦給變量),以便我可以將它傳遞給視圖?所以我需要得到值「真實」,「城市」,「Demme」,「http://test1.com」,「http://test3.com/img1....等等。

最新最好的方式將這些數據提交給view?

+0

待辦事項你有解析這個XML的具體問題,或者你甚至沒有嘗試學習如何做到這一點? http://whathaveyoutried.com – JeremyWeir

+0

您無法從C#中的XML中提取值。不可能。你需要使用C或Java :) PS:你有沒有嘗試過任何東西?你有什麼代碼可以顯示嗎? 「C#XML」在谷歌上成爲零點擊嗎? – paulsm4

+0

這是與另一個具有相同數據結構的問題不同的問題嗎? –

回答

1

我的想法是創建對應於你的Xml文件,Version類,Factory類的類,加載xml文件,然後將它傳遞給你的類,返回你的dat一,這裏是我如何做到這一點:

版本類:

public class Version 
{ 
    public bool IsProduct { get; set; } 
    public string City { get; set; } 
    public List<Factory> Factories { get; set; } 

    //Create a version 
    public Version(XElement xVersion) 
    { 
     IsProduct = Convert.ToBoolean(xVersion.Element("Product").Value); 
     City = xVersion.Element("City").Value; 
     Factories = Factory.GetFactories(xVersion); 
    } 

    //Get the list of versions 
    public static List<Version> GetVersions(XElement xDocument) 
    { 
     if (xDocument == null) 
      return null; 

     List<Version> list = new List<Version>(); 
     var xVersions = xDocument.Elements("Version"); 

     foreach (var xVersion in xVersions) 
     { 
      list.Add(new Version(xVersion)); 
     } 

     return list; 
    } 
} 

工廠類:

public class Factory 
{ 
    public string Name { get; set; } 
    public string Url { get; set; } 
    public string Thumbnail { get; set; } 
    public string Interval { get; set; } 

    //Create a factory 
    public Factory(XElement xFactory) 
    { 
     Name = xFactory.Attribute("Name").Value; 
     Url = xFactory.Attribute("Url").Value; 
     Thumbnail = xFactory.Attribute("Thumbnail").Value; 
     Interval = xFactory.Attribute("Interval").Value; 
    } 

    //Get the factories of a version 
    public static List<Factory> GetFactories(XElement xVersion) 
    { 
     var xFactories = xVersion.Elements("Factory"); 
     if (xFactories == null) 
      return null; 

     List<Factory> list = new List<Factory>(); 

     foreach (var xFactory in xFactories) 
     { 
      list.Add(new Factory(xFactory)); 
     } 

     return list; 
    } 
} 

而在去年,在你的MCV控制器:

private void myMethod() 
    { 
     var xDocument = XElement.Load("XmlFilePath"); 
     var versions = Version.GetVersions(xDocument); 

     //And then, pass the -versions- to your typed view ^^ 
    } 
+0

感謝您的幫助。我很感激。立即實施 – user1204195

+0

不客氣 – SidAhmed

+0

我幾乎在那裏,但有一個問題。 XML數據來自SQL數據庫而不是文件,所以XElement.Load(「XmlFilePath」);拋出錯誤「路徑中的非法字符 – user1204195

0
using System.Xml; 
    List<string> values= new List<string>();  
    XmlTextReader reader = new XmlTextReader ("books.xml"); 
    while (reader.Read()) 
    { 
      switch (reader.NodeType) 
      { 
        while (reader.MoveToNextAttribute()) // Read the attributes. 
        values.add(reader.Value); 
        break; 
     case XmlNodeType.Text: //Display the text in each element. 
        values.add(reader.Value); 
        break; 
     case XmlNodeType. EndElement: //Display the end of the element. 
      Console.WriteLine(">"); 
        break; 
      } 
     } 

現在你有值的列表,將其分配給模型,然後使用該模型來填充視圖。