2013-12-10 5 views
0
<?xml version='1.0' encoding='utf-8'?> 
<automationSettings> 

<VM name="DE-123" language="de" powerOn="true"> 
    <vmClients> 
     <vmClient name="KO-123" language="ko"/> 
        <vmClient name="US-123" language="en"/> 
        <vmClient name="FR-123" language="fr"/> 
    </vmClients> 
</VM> 

<VM name="ES-123" language="en" powerOn="true"> 
    <vmClients> 
     <vmClient name="IT-123" language="it"/> 
     <vmClient name="JA-123" language="ja"/> 
    </vmClients> 
</VM> 

</automationSettings> 

VM 요소의 이름이 일치 할 때 vmClient name 특성의 모든 값을 반환하는 C# 메서드가 있습니다. 예를 들어 name = "DE-123"인 VM의 VM 클라이언트 이름을 가져 오려고합니다. 시도한 코드는 있지만 반환하는 것은 아닙니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떤 도움을 주셔서 감사합니다.일치하는 모든 XML 노드를 LINQ를 사용하여 반환하십시오.

public static void GetClientsList(string systemName) 
    { 
     systemsFilePath = "text.xml"; 
     string listOfClients = string.Empty; 

     try 
     { 
      var xdoc = XDocument.Load(systemsFilePath); 
      var query = from vm in xdoc.Root.Descendants("VM").Descendants("vmClients").Elements() 
         where vm.Attribute("name").Value == systemName 
         select new 
         { 
          Name = (string)vm.Attribute("name").Value 
         }; 

      var vms = query.ToList(); 

      for (int i = 0; i < vms.Count; i++) 
      { 
       listOfClients += vms[i].Name + " "; 
      } 

      Global.epoClients = listOfClients; 
     } 

     catch (Exception ex) 
     { 
      Console.WriteLine("GetClientsList exception: " + ex.Message); 
     } 
    } 
} 
+0

현재 'name'속성은'vmClients' 요소 내에서 테스트 중입니다.하지만'name' 속성은'vmClient' (단수) 또는'VM'에만 있습니다. –

답변

1

나는 당신이 실제로 원하는 생각 : 우리가 VM 요소가 아닌 vmClients 요소를 테스트하는 방법

var query = xdoc.Root.Descendants("VM") 
       .Where(vm => (string) vm.Attribute("name") == systemName) 
       .Descendants("vmClient") 
       .Select(vmClient => (string) vmClient.Attribute("name")); 

참고.

+0

당신의 의혹이 올바른지 Jon. 그것은 완벽하게 작동했습니다. 신속한 답변을 보내 주셔서 감사합니다. 제이 – bearaman

관련 문제