Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c、 如何读取xml内部元素_C#_Xml - Fatal编程技术网

C# c、 如何读取xml内部元素

C# c、 如何读取xml内部元素,c#,xml,C#,Xml,我有一个xml文件,其中列出了生成字符串[]需要读取的一组文件。 我可以识别xml文件中的每个项目组: XmlNodeList projectsGroup = doc.SelectNodes("//ProjectGroups/ProjectGroup"); if (projectsGroup != null) { foreach (XmlNode projectNode in projectsGroup) { //Need to read inside the

我有一个xml文件,其中列出了生成字符串[]需要读取的一组文件。 我可以识别xml文件中的每个项目组:

XmlNodeList projectsGroup = doc.SelectNodes("//ProjectGroups/ProjectGroup");
if (projectsGroup != null)
{
    foreach (XmlNode projectNode in projectsGroup)
    {
         //Need to read inside the ProjectGroup, how?
    }
}
使用此代码,我可以创建每个项目组的列表。我如何在每个项目中阅读文件列表? 以下是我正在使用的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>

获得项目组列表后,您可以进一步选择—不是基于表示整个XML文档的doc变量,而是基于表示单个项目的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....
         }
    }

获得项目组列表后,您可以进一步选择—不是基于表示整个XML文档的doc变量,而是基于表示单个项目的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....
         }
    }

projectNode.SelectNodes.//File提供单个项目节点下的所有节点。只需迭代该列表并创建数组。

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

可以执行以下操作:

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


如果文件真的很大,我强烈建议使用,因为XmlDocument会将文件加载到内存中,因此与大文件一起使用并不方便。

可以这样做:

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


如果文件真的很大,我强烈建议使用,因为XmlDocument会将文件加载到内存中,所以与大文件一起使用不方便。

您必须使用//文件。XPath模式将返回文件中的所有文件节点。实际上,原始答案效果更好,因为它会迭代所有项目XmlNodeList files=projectNode。selectNodeOut//Project/File;。使用//File,我获取所有项目中的所有文件,而不知道它们属于哪个项目。另一方面,.//File与Out//Project/File的工作方式相同。您必须使用//File。XPath模式将返回文件中的所有文件节点。实际上,原始答案效果更好,因为它会迭代所有项目XmlNodeList files=projectNode。selectNodeOut//Project/File;。使用//File,我可以获取所有项目中的所有文件,而不知道它们属于哪个项目。另一方面,//File的工作方式与Out//Project/File相同。我感谢大家的帮助。我尝试了第一个建议,它解决了我的问题。谢谢大家,TonyI感谢大家的帮助。我尝试了第一个建议,它解决了我的问题。谢谢大家,托尼