2017-02-07 68 views
0

我有我想用C#變平,並保存爲一個文件(如下)許多個XML。我嘗試過的一個選擇是使用excel導入文件,然後從c#調用vba腳本。有沒有選擇在C#中做到這一點。轉換XML文件轉換成平面文件以表格格式

樣品輸入XML:

<request> 
    <log-date>11/28/2016 04:48:40</log-date> 
    <service-name>getPdf</service-name> 
    <request-id>1234</request-id> 
    <request-xml> 
    <MyRequest xmlns="http://abcd.com"> 
     <GroupID>123</GroupID> 
     <ClientName>ACBD</ClientName> 
     <BrokerInfo> 
      <BrokerLoginName>9876</BrokerLoginName> 
      <FullName>John</FullName> 
     </BrokerInfo> 
     <BrokerInfo> 
      <BrokerLoginName>0987</BrokerLoginName> 
      <FullName>Mike</FullName> 
     </BrokerInfo> 
    </MyRequestRequest> 
    </request-xml> 
</request> 

預期輸出文件:

log-date|service-name|request-id|groupID|ClientName|BrokerLoginName|FullName 
11/28/2016 04:48:40|getPdf|1234|123|ACBD|9876|John 
11/28/2016 04:48:40|getPdf|1234|123|ACBD|0987|Mike 
+0

看看[這個問題](HTTP:// stackoverflow.com/questions/6228315/convert-xml-to-datatable)。它可能有幫助! –

回答

0

這裏是您的解決方案:

using System.IO; 
using System.Xml; 

     public static void ReadInnerText() 
    { 
     StreamWriter file = new StreamWriter("myTextFile.txt"); 
     file.WriteLine("log-date|service-name|request-id|groupID|ClientName|BrokerLoginName|FullName"); 
     string Line = string.Empty; 
     string BrokerLoginName = string.Empty; 
     XmlDocument doc = new XmlDocument(); 
     XmlNodeList SecondTag; 
     XmlNodeList ThirdTag; 
     XmlNodeList FourthTag; 
     XmlNodeList FifthTag; 
     doc.Load("inputFile.xml"); 
     XmlNodeList elemList = doc.GetElementsByTagName("request"); 
     foreach (XmlNode firstNode in elemList) 
     { 

      SecondTag = firstNode.ChildNodes; 
      foreach (XmlNode SecondNode in SecondTag) 
      { 

       if (SecondNode.Name.Equals("log-date")) 
       { 
        Line = SecondNode.InnerText + "|"; 
       } 
       if (SecondNode.Name.Equals("service-name")) 
       { 
        Line = Line + SecondNode.InnerText + "|"; 
       } 
       if (SecondNode.Name.Equals("request-id")) 
       { 
        Line = Line + SecondNode.InnerText + "|"; 
       } 
       ThirdTag = SecondNode.ChildNodes; 
       foreach (XmlNode ThirdNode in ThirdTag) 
       { 
        FourthTag = ThirdNode.ChildNodes; 
        foreach (XmlNode FourthNode in FourthTag) 
        { 
         if (FourthNode.Name.Equals("GroupID")) 
         { 
          Line = Line + FourthNode.InnerText + "|"; 
         } 
         if (FourthNode.Name.Equals("GroupName")) 
         { 
          Line = Line + FourthNode.InnerText + "|"; 
         } 
         if (FourthNode.Name.Equals("ClientName")) 
         { 
          Line = Line + FourthNode.InnerText + "|"; 
         } 
         FifthTag = FourthNode.ChildNodes; 
         foreach (XmlNode FifthNode in FifthTag) 
         { 
          if (FifthNode.Name.Equals("BrokerLoginName")) 
          { 
           BrokerLoginName = FifthNode.InnerText + "|"; 
          } 
          if (FifthNode.Name.Equals("FullName")) 
          {  
           file.WriteLine(Line+BrokerLoginName+FifthNode.InnerText); 
          } 
         } 
        } 
       } 
      } 
     } 
     file.Close(); 
    } 
+0

謝謝!但是,我試圖編寫一個通用代碼來解析通過不同的XML模式,沒有硬編碼標籤 –

+0

也許這將幫助您https://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.depth (v = vs.110)的.aspx –