2017-03-08 82 views
1

以下是XML示例。 '文件'是重複的節點。需要從'sftp'中讀取'filename'和'sftp1','sftp2','sftp3'元素值。我們需要爲每個'文件'節點重複相同的操作。如何從xml文件讀取子節點值

<FTPLocations> 
 
    <file> 
 
    <filedetails> 
 
     <filename>sample.txt</filename> 
 
    </filedetails> 
 
    <sftp> 
 
     <sftp1> 
 
     <sftp-username>UN</sftp-username> 
 
     <sftp-password>PW</sftp-password> 
 
     <sftp-host>ipaddress</sftp-host>   
 
     <sftp-path>path</sftp-path> 
 
     </sftp1> 
 
     <sftp2> 
 
     <sftp-username>UN</sftp-username> 
 
     <sftp-password>PW</sftp-password> 
 
     <sftp-host>ipaddress</sftp-host>    
 
     <sftp-path>path</sftp-path> 
 
     </sftp2> 
 
     <sftp3> 
 
     <sftp-username>UN</sftp-username> 
 
     <sftp-password>PW</sftp-password> 
 
     <sftp-host>ipaddress</sftp-host>   
 
     <sftp-path>path</sftp-path> 
 
     </sftp3> 
 
    </sftp> 
 
    </file> 
 
    <file> 
 
    <filedetails> 
 
     <filename>sample.txt</filename> 
 
    </filedetails> 
 
    <sftp> 
 
     <sftp1> 
 
     <sftp-username>UN</sftp-username> 
 
     <sftp-password>PW</sftp-password> 
 
     <sftp-host>ipaddress</sftp-host>   
 
     <sftp-path>path</sftp-path> 
 
     </sftp1> 
 
     <sftp2> 
 
     <sftp-username>UN</sftp-username> 
 
     <sftp-password>PW</sftp-password> 
 
     <sftp-host>ipaddress</sftp-host>    
 
     <sftp-path>path</sftp-path> 
 
     </sftp2> 
 
     <sftp3> 
 
     <sftp-username>UN</sftp-username> 
 
     <sftp-password>PW</sftp-password> 
 
     <sftp-host>ipaddress</sftp-host>   
 
     <sftp-path>path</sftp-path> 
 
     </sftp3> 
 
    </sftp> 
 
    </file>   
 
</FTPLocations>

請建議我我如何才能做到這一點使用C#。

回答

0

您可以訪問使用下面的代碼的XML元素:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("YOUR_PATH_TO_XML"); 
//for sftp1 
XmlNodeList sftp1_hd = xmlDoc.GetElementsByTagName("sftp1"); 
foreach (XmlNode sftp1_node in sftp1_hd) 
{ 
    foreach (XmlNode sftp1_child_nodes in sftp1_node.ChildNodes) 
    { 
    Console.WriteLine(sftp1_child_nodes.LocalName); 
    Console.WriteLine(sftp1_child_nodes.InnerText); 
    } 

} 

//for sftp2 
XmlNodeList sftp2_hd = xmlDoc.GetElementsByTagName("sftp2"); 
foreach (XmlNode sftp2_node in sftp2_hd) 
{ 
    foreach (XmlNode sftp2_child_nodes in sftp2_node.ChildNodes) 
    { 
    Console.WriteLine(sftp2_child_nodes.LocalName); 
    Console.WriteLine(sftp2_child_nodes.InnerText); 
    } 

} 
0

嘗試XML LINQ

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication47 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      var results = doc.Descendants("sftp").Elements().Select(x => new 
      { 
       name = x.Name.LocalName, 
       username = (string)x.Element("sftp-username"), 
       password = (string)x.Element("sftp-password"), 
       host = (string)x.Element("sftp-ipaddress"), 
       path = (string)x.Element("sftp-path") 
      }).ToList(); 
     } 
    } 
}