2010-11-21 67 views
0

我做了一個程序,其中我從我的數據庫SQL 2005中檢索xml代碼,現在我想在windows窗體應用程序中顯示所有屬性以及它們的值。有沒有任何功能支持?如何?使用C#獲取xml的屬性和值#

<Permission> 
    <CP name="Student"> 
     <tab name="studentinfo"> 
     </tab> 
     <tab name="notes"> 
      <groupbox name="ss"> 
      <field type="textArea" x="xxx" /> 
      </groupbox> 
     </tab> 
    </CP> 
    <CP name="Teacher"> 
    </CP> 
    <CP name="doctor"> 
    </CP> 
</Permission> 

輸出: 名= 「學生」 NAME = 「學生信息」

等..

+0

你有一個示例架構? – Iain 2010-11-21 10:08:29

+0

更新......... – salman 2010-11-21 10:11:39

+0

xml代碼不是在這裏apearing,但你可以得到一個想法 – salman 2010-11-21 10:13:21

回答

1

您可以通過XML這樣對LINQ的波紋管:

 XDocument xmlDoc = XDocument.Load("a.xml"); 
     var nodeAttrs = xmlDoc.Descendants().Select(x => x.Attributes()); 
     foreach (var attrs in nodeAttrs) 
     { 
      foreach (var attr in attrs) 
       Console.WriteLine("Name: {0}, Value :{1}", attr.Name ,attr.Value); 
     } 

輸出如下爲您的XML:

Name: name, Value :Student 
Name: name, Value :studentinfo 
Name: name, Value :notes 
Name: name, Value :ss 
Name: type, Value :textArea 
Name: x, Value :xxx 
Name: name, Value :Teacher 
Name: name, Value :doctor 

編輯:如果你有這代表你的XML字符串,你可以做

var xmlString = "<Permission> <CP name=\"Student\"> <tab name=\"studentinfo\"></tab><tab name=\"notes\"><groupbox name=\"ss\"><field type=\"textArea\" x=\"xxx\" /></groupbox></tab></CP><CP name=\"Teacher\"></CP><CP name=\"doctor\"></CP></Permission>"; 
    byte[] byteArray = Encoding.ASCII.GetBytes(xmlString); 
    MemoryStream stream = new MemoryStream(byteArray); 

然後

var xmlDoc = XDocument.Load(stream); 
0

的XML到LINQ庫,使這很容易

using (XmlTextReader reader = new XmlTextReader("C:/whatever.xml")) 
    { 
    reader.Read(); 
    XElement permission = (XElement)XElement.ReadFrom(reader); 
    string name = permission.Element("CP").Attribute("name").Value; 
    foreach (var tab in permission.Element("CP").Elements("tab")) 
    { 
     string tabName = tab.Attribute("name").Value; 
    } 
    } 
+0

你可以在Windows窗體中顯示它嗎?我也有從數據庫的XML不是一個單獨的文件,所以我怎麼能做到這一點? – salman 2010-11-21 11:00:57