2013-08-16 3 views
1

각 끝점 요소의 각 개별 주소 값을 읽고 각 개별 요소를 별도의 텍스트 상자에 표시하려고합니다.XML 파일에서 값을 읽으려고 시도합니다.

<client> 
    <endpoint address="http://127.0.0.1:" /> 
    <endpoint address="http://127.0.0.1:" /> 
    <endpoint address="net.tcp://127.0.0.1:" /> 
</client> 

XML 데이터를 읽고 마지막 요소의 값만 표시 할 수 있습니다. 이것은 실제로 C#에서 무엇이든 개발하는 첫 번째 시도입니다. 여기

코드의 비트가 내가 쓴 것입니다 : 나는 내 자신에 대한 대답을 찾는 것 한편

 XmlReader ReadFile = XmlReader.Create(AgentConfig.FileName); 
     while (ReadFile.Read()) 
     { 
      if ((ReadFile.NodeType == XmlNodeType.Element) && (ReadFile.Name == "endpoint")) 
      { 
       if (ReadFile.HasAttributes) 
       { 
        textBox2.Text = ReadFile.GetAttribute("address"); 
        textBox3.Text = ReadFile.GetAttribute("address"); 
       } 
      } 
     } 

하지만, 모든 입력은 확실히 주시면 감사하겠습니다! :)

+0

아래 내가 XML로하여 XDocument와 Linq에로보고 추천과 같은 텍스트 상자를 설정 – TGH

+0

고맙습니다. 꼭 읽어 보겠습니다. – bitbreaker

답변

3

LINQ to XML이 경우에 더 편리합니다 사용 :

var addresses = XDocument.Load(AgentConfig.FileName) 
          .Descendants("endpoint") 
          .Select(x => (string)x.Attribute("address")) 
          .ToList(); 

이 결과는 List<string>, 그래서, 당신은 단순히 인덱스하여 텍스트 상자에 할당 할 수 있습니다

textBox1.Text = addresses[0]; 
textBox2.Text = addresses[1]; 
textBox3.Text = addresses[2]; 
+0

그 덕분에, 고마워! – bitbreaker

+0

또 다른 질문입니다. 괜찮 으면 - 데이터를 원래 XML 파일로 저장하는 방법은 무엇입니까? – bitbreaker

+0

@bitbreaker : 덧글에 답하지 않고 다른 질문을 자세히 물어 보는 것이 좋습니다. –

0

I XML 데이터를 읽고 마지막 요소의 값만 표시 할 수 있습니다.

사용자가 자신의 값을 덮어 쓰고 있기 때문에이 문제가 발생합니다. 당신이 추가하려는 경우 당신은 당신이 주소를 추가 할 수 있습니다이

StringBuilder sb = new StringBuilder(); //before while loop 
StringBuilder sb1 = new StringBuilder(); //before while loop 
XmlReader ReadFile = XmlReader.Create(AgentConfig.FileName); 
    while (ReadFile.Read()) 
    { 
     if ((ReadFile.NodeType == XmlNodeType.Element) && (ReadFile.Name == "endpoint")) 
     { 
      if (ReadFile.HasAttributes) 
      { 
       sb.Append(ReadFile.GetAttribute("address") + " "); 
       sb1.Append(ReadFile.GetAttribute("address") + " "); 

      } 
     } 
    } 

//Then after your loop 
textBox2.Text = sb.ToString(); 
textBox3.Text = sb1.ToString(); 
+0

입력 해 주셔서 감사합니다. – bitbreaker

0

처럼 변경할 필요는 목록에 속성 그리고 마지막으로

List<string> addresses = new List<string>(); 
XmlReader ReadFile = XmlReader.Create(AgentConfig.FileName); 
while (ReadFile.Read()) 
{ 
    if ((ReadFile.NodeType == XmlNodeType.Element) && (ReadFile.Name == "endpoint")) 
    { 
     if (ReadFile.HasAttributes) 
     { 
      addresses.Add(ReadFile.GetAttribute("address")); 
     } 
    } 
} 
if (addresses.Count >0) 
{ 
    textBox1.Text = addresses[0]; 
} 
if (addresses.Count >= 1) 
{ 
    textBox2.Text = addresses[1]; 
} 
관련 문제