c#,如何读取xml内部元素

时间:2011-08-24 19:16:20

标签: c# xml

我有一个xml文件,列出了我需要阅读的一堆文件以生成string[]。 我可以在xml文件中识别每个ProjectGroup:

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>

3 个答案:

答案 0 :(得分:4)

获得项目组列表后,您可以进一步选择 - 不是基于代表整个XML文档的doc变量 - 而是基于代表单个项目的projectNode:< / p>

    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....
         }
    }

答案 1 :(得分:1)

projectNode.SelectNodes('.//File')为您提供所有<File> - 单个项目节点下的节点。只需迭代该列表并创建数组。

答案 2 :(得分: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会将文件加载到内存中,因此将它与大文件一起使用会不方便。