【问题标题】:How to read sub node values from xml file如何从 xml 文件中读取子节点值
【发布时间】:2017-03-08 12:39:50
【问题描述】:

以下是 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# 来实现这一点。

【问题讨论】:

    标签: c# .net xml


    【解决方案1】:

    您可以使用以下代码访问 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);
      }
    
    }
    

    【讨论】:

      【解决方案2】:

      试试 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();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-19
        • 2013-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-12
        • 1970-01-01
        相关资源
        最近更新 更多