如何从xml文件中读取子节点值

时间:2017-03-08 12:39:51

标签: c# .net xml

以下是XML示例。 'file'是重复的节点。需要从'sftp'中读取'filename'和'sftp1','sftp2','sftp3'元素值。我们需要为每个“文件”节点重复相同的操作。

<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#实现这一目标。

2 个答案:

答案 0 :(得分: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);
  }

}

答案 1 :(得分: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();
        }
    }
}