2013-03-29 25 views
0

这里是我的XML代码(module.xml)如何通过它的atrribute名称选择一个节点并在C#中获取它的子节点?

<module code="ECSE502"> 
    <code>ECSE502</code> 
    <name>Algorithms and Data structures</name> 
    <semester>1</semester> 
    <prerequisites>none</prerequisites> 
    <lslot>0</lslot> 
    <tslot>1</tslot> 
    <description>all about algorythms and data structers</description> 
</module> 
<module code="EIGA501"> 
    <code>EIGA501</code> 
    <name>3D Grapgics I</name> 
    <semester>1</semester> 
    <prerequisites>none</prerequisites> 
    <lslot>2</lslot> 
    <tslot>3</tslot> 
    <description>xxxxxxxxxxxxxxxxxxxxxx</description> 
</module> 

根据上面的XML代码,我需要只给ECSE502作为输入来获得集。 选择所需节点后,我需要获取其子节点的值(名称,学期等)。 在XML文件中有20个节点。这只是第2节点。

这个我试过到目前为止

XmlTextReader reader = new XmlTextReader("modules.xml"); 
      XmlDocument doc = new XmlDocument(); 
      XmlNode node = doc.ReadNode(reader); 

     foreach (XmlNode chldNode in node.ChildNodes) 
      Console.WriteLine(reader.Value); 

回答

1

试试这个:

包裹你的XML以一种独特的根节点即

<modules> 
    <module code... 
     .. 
    </module> 
    <module code... 
</modules> 

然后

string text="ECSE502"; 

XmlDocument xml = new XmlDocument(); 
xml.Load("physical path to module.xml"); 

XmlNodeList xnList = xml.SelectNodes("modules/module[@code='"+text+"']"); 
foreach (XmlNode xn in xnList) 
{ 
    string code = xn.SelectSingleNode("code").innerText; 
    string name= xn.SelectSingleNode("name").innerText; 
    //and similarly find other inner nodes 
} 
+0

没有工作。和它在做什么, XmlNodeList xnList = xml.SelectNodes(“/ module [@code ='”+ text +“'”“); – Ravindu

+1

尝试将您的模块封装在根标记中。如果

+0

,它只会找到那些代码属性为 –

2

你可以使用LINQ to XML,assum E在这里的代码返回匿名对象的名单,但如果你愿意,你可以明确地定义你自己的类:

var xDoc = XDocument.Load("yourpathfile"); 
var result = xDoc.Descendants("module") 
      .Where(x => (string) x.Element("code") == "ECSE502") 
      .Select(x => new 
          { 
           Name = (string)x.Element("name"), 
           //..... 
          }); 
+0

我试过@Manish Mishra的方式。它正在工作。 – Ravindu

+1

@Ravindu:尝试这种方式:) –

+0

好吧,我也会试试这个 – Ravindu

1

试试下面的代码创建在XML根节点与后

XDocument xdoc = XDocument.Load(@"D:\data\rvyas\Projects\Client\module.xml"); 


string code = "ECSE502"; 
    var result = xdoc.Descendants("module") 
       .Where(x => (string)x.Element("code") == code) 
       .Select(x => new 
       { 
        Name = (string)x.Element("name"), 
        Code = (string)x.Element("code"), 
        semester = (string)x.Element("semester"), 
        prerequisites = (string)x.Element("prerequisites"), 
        lslot = (string)x.Element("lslot"), 
        tslot = (string)x.Element("tslot") 

       }).ToList(); 

你的XML应该是这样的:

<root> 
<module code="ECSE502"> 
    <code>ECSE502</code> 
    <name>Algorithms and Data structures</name> 
    <semester>1</semester> 
    <prerequisites>none</prerequisites> 
    <lslot>0</lslot> 
    <tslot>1</tslot> 
    <description>all about algorythms and data structers</description> 
</module> 
<module code="EIGA501"> 
    <code>EIGA501</code> 
    <name>3D Grapgics I</name> 
    <semester>1</semester> 
    <prerequisites>none</prerequisites> 
    <lslot>2</lslot> 
    <tslot>3</tslot> 
    <description>xxxxxxxxxxxxxxxxxxxxxx</description> 
</module> 
</root> 
相关问题