2010-11-21 69 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