2013-03-06 4 views
2

xml 파일에서 사용자 지정 childnode 값을 수집하고 양식의 부 데이터를 다시 쓰는 방법을 만들고 싶습니다. 나는 ArrayList에있는 데이터를 수집하고 그것을 메소드에 넘겨주는 아이디어를 가지고있었습니다. 하지만 ArraList에는 8 개의 요소와 증분 변수의 값도 포함되어 있지만 ArgumentOutOfRangeException이 발생하기 때문에 foreach에서는 변경할 수 없습니다. 그래서 나는 도움을 청할 것이다.Xelement 값을 쓰려면 어떻게해야합니까?

public static void Search(ArrayList nodeIds, ArrayList values) 
     { 
      XDocument doc = XDocument.Load("Options.xml"); 
      int i = 0; 
      foreach (XElement option in doc.Descendants("BasicOptions")) 
      { 
       foreach(string nodeId in nodeIds) 
       { 
        if (option.Attribute("id").Value == nodeId) 
        { 
         foreach (XElement prop in option.Nodes()) 
         { 
          prop.Value = values[i].ToString(); 
          i++; 
         } 
        } 
       } 
      } 
      doc.Save("Options.xml"); 
    } 
+0

이 ** 내가 ** 밖으로 아닌지 확인을 있습니까 범위의? i == 8 및 values.Count == 8로 충돌합니다 ... –

+2

ArrayList ??? 그게 뭐야? –

+0

@ MatíasFidemraizer ArrayList와 LINQ to XML을 함께 사용하는 것이 감동적이라고 생각하지 않습니까? –

답변

1

3foreach 제표에 대한 외부 적으로 선언하고 중앙 foreach 내에서 사용되기 때문에 i 질문없이 범위를 벗어 갈 것이다 나에게 보인다 여기

는 코드입니다. 당신은 당신의 접근 방식을 다시 생각해야합니다.

내가 제안하지만, 들어오는 값을 알고 또는 왜 당신이를 호출하지 않고, 다음과 같이 내부 foreachfor 문을 redclare합니다 :

public static void Search(ArrayList nodeIds, ArrayList values) 
{ 
    XDocument doc = XDocument.Load("Options.xml"); 
    foreach (XElement option in doc.Descendants("BasicOptions")) 
    { 
     foreach (string nodeId in nodeIds) 
     { 
      if (option.Attribute("id").Value == nodeId) 
      { 
       var nodes = option.Nodes().ToList(); 
       for (int i = 0; i < nodes.Count && i < values.Count; i++) 
       { 
        XElement node = (XElement)nodes[i]; 
        node.Value = values[i].ToString(); 
       } 
      } 
     } 
    } 
    doc.Save("Options.xml"); 
} 
+0

많은 감사, 당신은 내 하루를 저장 :) 그게 거의 내가 시도하지 않은 유일한 방법. 하지만 지금은 완벽하게 작동합니다. 최대한 빨리 투표 할게. – NeverJr

관련 문제