2011-08-24 3 views
1

string[]을 생성하기 위해 읽어야하는 파일들을 나열하는 xml 파일이 있습니다. 나는 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 파일입니다 : - 전체 XML 문서를 나타내는 doc 변수를 기반으로하지 - 당신이 프로젝트 그룹 목록을 일단

<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

것은, 당신이 더 선택할 수 있지만 기반으로 하나의 프로젝트 나타냅니다 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 파일 = projectNode.SelectNodes ("Out // Project/File");)를 반복하므로 원본 응답이 더 잘 작동합니다. "// File"을 사용하면 프로젝트가 속한 프로젝트를 모른 채 모든 프로젝트의 모든 파일을 가져옵니다. – tony

1

projectNode.SelectNodes('.//File')는 단일 프로젝트 노드 아래에 당신에게 모든 <File> -nodes을 제공합니다. 해당 목록을 반복하여 배열을 만듭니다. 파일을 XmlDocument가 메모리에 파일을로드로 난 강력하게, 사용 XPathNavigator 추천 정말 큰 경우

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

편집

, 그래서 그것을 사용하기 편리 아니다 :

0

은 이런 식으로 뭔가를 할 수 큰 파일들.

관련 문제