2014-09-05 3 views
0

안녕하세요 좋은 오후 내 질문은 : 여러 파일을 읽기읽기 여러 XML 파일 및 주문 목록보기

  1. :

    임에 코드를 작성하는 내가 이상을 선택하면 OpenFileDialog를 가진 하나 개의 파일을 읽을 ICAN 하나 이상의 프로그램이 하나만 걸립니다, 나는 foreach를 사용할 수 있다고 생각하지만 구현 방법을 모른다.

  2. 주문 목록보기에 XML 노드, 내가 목록보기를 출력은 다음과 같이되어야합니다 :

    :


Test Name  Limit Judgment Measurement High Limit  Low Limit 
Main__checkt  0     3    5   3 
Main__Initia  0     4    4   3 
Main__Serial  0     3    4   3 

하지만 내 출력이 있습니다


Test Name  Limit Judgment Measurement High Limit  Low Limit 
Main__Initia  0     3    5   3 
Main__Serial  0     3    5   3 
Main__Cylind  0     3    5   3 

programa는 첫 번째 행을 취하고 itera 다른 열에 어떻게 주문해야합니까?

XML FILE

이 코드는 다음과 같습니다 :

내 XML 파일의 샘플입니다

private void button1_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog ofd = new OpenFileDialog(); 
    ofd.Filter = "XML | *.xml"; 
    ofd.Multiselect = true; 
    ofd.ShowDialog(); 
    XmlDocument xml = new XmlDocument(); 
    xml.Load(ofd.FileName); // suppose that myXmlString contains "<Names>...</Names>" 
    ListViewItem lvi; 

    XmlNodeList xnList = xml.SelectNodes("/LogBatch/LogTestplan/LogTest"); 
    foreach (XmlNode xn in xnList) 
    { 

     string tnam = xn["TestName"].InnerText; 

     lvi = new ListViewItem(); 
     lvi.Text = tnam; 
     listView1.Items.Add(lvi); 

     XmlNodeList xnList2 = xml.SelectNodes("/LogBatch/LogTestplan/LogTest/LogLimit"); 
     foreach (XmlNode xn2 in xnList2) 
     { 

      string limjud = xn2["LimitJudgment"].InnerText; 
      string limlm = xn2["LimitLastMeasuredValue"].InnerText; 
      string limhl = xn2["LimitHighLimit"].InnerText; 
      string limlw = xn2["LimitLowLimit"].InnerText; 

      lvi.SubItems.Add(limjud); 
      lvi.SubItems.Add(limlm); 
      lvi.SubItems.Add(limhl); 
      lvi.SubItems.Add(limlw); 
      string nomval = "4"; 
      lvi.SubItems.Add(nomval); 
      string devstd = "0.46291"; 
      lvi.SubItems.Add(devstd); 
      string cp = "0.72"; 
      lvi.SubItems.Add(cp); 
     } 
    } 
} 

도와주세요. 감사합니다. 최고 감사합니다.

답변

0

에 대한 질문이 너무 광범위하기 때문에 전체 코드를 기대하지 마십시오. 그러나 여기에 주요 포인트가 모두 요구 사항을 수행 할 수 있습니다 : Multiselect 모드를 사용하는 경우

  1. , 대신 단일 FileName 재산을 FileDialog.FileNames을 확인해야합니다. 이 시점에서 당신은 FileNames을 통해 쉽게 반복 할 수 있어야하며 각각을 XmlDocument 개체에로드 할 수 있어야합니다.

  2. 은 외부 foreach 루프는 현재 <LogLimit>에 XPath에 상대적으로 사용해야에서 현재 <LogTest>에 해당 <LogLimit> 노드를 얻으려면.

그래서 대신에 전체 경로를 사용하여 :

XmlNodeList xnList2 = xn.SelectNodes("LogLimit"); 

당신은 대체 SelectSingleNode()을 고려할 수 있습니다 :

XmlNodeList xnList2 = xn.SelectNodes("./LogLimit"); 

하거나 :

XmlNodeList xnList2 = xml.SelectNodes("/LogBatch/LogTestplan/LogTest/LogLimit"); 

가 상대 경로를 시도 SelectNodes()은 하나 이상의 노드가 XPath를 만족하지 않는다는 것을 정확히 알고있는 상황에서 사용됩니다.

1) 각 문제마다 별도의 질문을 게시하십시오. 그리고 모든 코드와 전체 XML 파일 내용을 던지기보다는 create a Minimal, Complete, and Verifiable example을 시도하십시오. 이 예는 문제를 명확히하는데 많은 도움을 줄 것입니다. 특히 영어를 쓰는 데 한계가있을 때 (이 사이트 이외에 영어를 거의 쓰거나 말하지 않습니다 : p). 예제를 만드는 과정에서 무언가를 배우거나 심지어 해결책을 찾을 수도 있습니다.

+0

대단히 고맙고, 나는 당신의 권고를 따를 것입니다. 나는 포럼에 새로운 글을 쓰고, 많은 것을 배웠습니다. . –