XML到字符串列表

本文关键字:列表 字符串 XML | 更新日期: 2023-09-27 18:03:38

我有一些代码,我需要在c#中放入字符串列表,我正在从XML文件中读取此代码,其布局如下…

<?xml version="1.0"?>
<accountlist>
    <main>
        <account id="1" special_id="4923959">
            <username>Adam</username>
            <motto>Hello Everyone>
            <money>1004</money>
            <friends>394</friends>
            <rareid>9</rareid>
            <mission>10</mission>
        </account>
    </main>
</accountlist>

如何将每个帐户标签放入字符串列表中?从一开始<账户>到 tag?

请不要告诉我去下面的链接,因为它不起作用!如何读取XML文件并写入列表<>?

到目前为止,我已经尝试了下面的代码,字符串列表只是保持空
XDocument doc = XDocument.Parse(this._accountsFile);
            List<string> list = doc.Root.Elements("account")
                               .Select(element => element.Value)
                               .ToList();
            this._accounts = list;

XML到字符串列表

您必须使用Descendants而不是Elements:

List<string> list = doc.Root.Descendants("account").Descendants()
                   .Select(element => element.Value)
                   .ToList();

Elements只返回元素的子元素(在根元素的情况下,这意味着<main>)。
Descendants返回元素中的整个树。

还有:您必须将标签<motto>Hello Everyone>修改为<motto>Hello Everyone</motto>

这将在您的示例中工作(但您需要关闭此标记<motto>Hello Everyone>

)
      public List<string> GetAccountsAsXmlList(string filePath)
      {
        XmlDocument x = new XmlDocument();
        x.Load(filePath);
        List<string> result = new List<string>();
        XmlNode currentNode;
        foreach (var accountNode in x.LastChild.FirstChild.ChildNodes)
        {
            currentNode = accountNode  as XmlNode;
            result.Add(currentNode.InnerXml);
        }
          return result;
      }

编辑作为你问题的答案:

是否有一种方法,我可以得到id和specal_id在一个单独的字符串?

您可以使用currentNode.Attributes["YourAttributeName"].Value,来获取值。


假设你有Account类:

class Account
    {
        public string  accountXml { get; set; }
        public string Id { get; set; }
        public string Special_id { get; set; }
    }

:

   public List<Account> GetAccountsAsXmlList(string filePath)
   {
     XmlDocument x = new XmlDocument();
     x.Load(filePath);
     List<Account> result = new List<Account>();
     XmlNode currentNode;
     foreach (var accountNode in x.LastChild.FirstChild.ChildNodes)
     {
         currentNode = accountNode as XmlNode;
         result.Add(new Account
         {
             accountXml = currentNode.InnerXml,
             Id = currentNode.Attributes["id"].Value,
             Special_id = currentNode.Attributes["special_id"].Value,
         });
     }
      return result;
 }

使用XPath先获取account元素:

using System.Xml.XPath;    
XDocument doc = XDocument.Parse(xml);
foreach(var account in doc.XPathSelectElements("accountlist/main/account")){
        List<string> list = account.Descendants()
                       .Select(element => element.Value)
                       .ToList();
}

试试这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication37
{
    class Program
    {
        static void Main(string[] args)
        {
            string input =
                "<?xml version='"1.0'"?>" +
                "<accountlist>" +
                  "<main>" +
                    "<account id='"1'" special_id='"4923959'">" +
                      "<username>Adam</username>" +
                      "<motto>" +
                        "Hello Everyone>" +
                        "<money>1004</money>" +
                        "<friends>394</friends>" +
                        "<rareid>9</rareid>" +
                        "<mission>10</mission>" +
                      "</motto>" +
                      "</account>" +
                  "</main>" +
                "</accountlist>";
            XDocument doc = XDocument.Parse(input);
            var results = doc.Descendants("accountlist").Select(x => new {
                id = x.Element("main").Element("account").Attribute("id").Value,
                special_id = x.Element("main").Element("account").Attribute("special_id").Value,
                username = x.Element("main").Element("account").Element("username").Value,
                motto = x.Element("main").Element("account").Element("motto").FirstNode.ToString(),
                money = x.Element("main").Element("account").Element("motto").Element("money").Value,
                friends = x.Element("main").Element("account").Element("motto").Element("friends").Value,
                rareid = x.Element("main").Element("account").Element("motto").Element("rareid").Value,
                mission = x.Element("main").Element("account").Element("motto").Element("mission").Value,
            }).ToList();
        }
    }
}