2011-08-24 80 views
1

我有一个xml文件,列出了一堆我需要读取以生成string[]的文件。 我可以在XML文件中识别每个ProjectGroup:c#,如何读取xml内部元素

XmlNodeList projectsGroup = doc.SelectNodes("//ProjectGroups/ProjectGroup"); 
if (projectsGroup != null) 
{ 
    foreach (XmlNode projectNode in projectsGroup) 
    { 
     //Need to read inside the ProjectGroup, how? 
    } 
} 

有了这个代码,我可以创建每个ProjectGroup列表。我如何在每个项目中读取我的文件列表? 这里是我一起工作的XML文件:

<ProjectGroups> 
    <ProjectGroup Name = "InvGroup"> 
    <Out> 
     <Project Name="Inv.Commands" In="false" LC="false"> 
     <File>Inv.Commands.dll</File> 
     <File>Inv.Commands.pdb</File> 
     <File>Inv.Commands.xml</File> 
     </Project> 
     <Project Name="Inv.Common" In="false" LC="false"> 
     <File>Inv.Common.dll</File> 
     <File>Inv.Common.pdb</File> 
     <File>Inv.Common.xml</File> 
     </Project> 
    </Out> 
    </ProjectGroup> 

    <ProjectGroup Name = "RATGroup"> 
    <Out> 
     <Project Name="DB_RAT" In="false" LC="false" IF="" /> 
     <Project Name="AnalyzeData" In="false" LC="true" IF=""> 
     <File>AnalyzeData.dll</File> 
     <File>AnalyzeData.pdb</File> 
     <File>AnalyzeData.xml</File> 
     </Project> 
     <Project Name="Commands.GetCh" In="false" LC="true" IF=""> 
     <File>Commands.GetCh.dll</File> 
     <File>Commands.GetCh.pdb</File> 
     <File>Commands.GetCh.xml</File> 
     </Project> 
    </Out> 
    </ProjectGroup> 
</ProjectGroups> 
+0

我很感谢大家的帮助。我尝试了第一个建议,它解决了我的问题。谢谢大家,Tony – tony

回答

4

一旦你有项目组的列表,您可以进一步选择 - 不是基于doc变量,它代表了整个XML文档 - 但是基于projectNode表示单个项目:

foreach (XmlNode projectNode in projectsGroup) 
    { 
     //Need to read inside the ProjectGroup, how? 
     XmlNodeList files = projectNode.SelectNodes("//File"); 

     foreach(XmlNode fileNode in files) 
     { 
      // do whatever you need to do to the "file" node here.... 
     } 
    } 
+0

你必须使用'.//文件'。您的XPath模式将返回文件中的所有文件节点。 – Achim

+0

感谢您的快速回复。它解决了我的问题。 Tony – tony

+0

实际上,原始答案效果更好,因为它遍历所有项目(XmlNodeList files = projectNode.SelectNodes(“Out // Project/File”);)。通过“// File”,我可以在不知道它们属于哪个Project的情况下获取所有项目中的所有文件。 – tony

1

projectNode.SelectNodes('.//File')给你所有<File> -nodes单个项目节点下。只需遍历该列表并创建数组。

0

可以做这样的事情:

XmlDocument doc = new XmlDocument(); 
    doc.Load(xmlfilepath); 
    XmlNodeList nodes = doc["ProjectGroups"]["ProjectGroup"]["Out"]["Project"].ChildNodes; 
    foreach(XmlNode node in nodes) { 
    //do something 
    } 

编辑

如果文件是非常大的,我强烈建议使用XPathNavigator,作为XmlDocument的加载文件到内存中,所以它不是方便使用它与大文件。