XML到字符串列表

时间:2015-07-21 06:45:16

标签: c# xml

我需要将一些代码放入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>

如何将每个帐户标记放入字符串列表?从第一个&lt;帐户&gt;到&lt; / account&gt;标记

请不要告诉我转到下面的链接,因为它不起作用!! How to read a XML file and write into List<>?

到目前为止,我已经尝试了以下代码,字符串列表保持空白

XDocument doc = XDocument.Parse(this._accountsFile);

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

            this._accounts = list;

4 个答案:

答案 0 :(得分:6)

您必须使用int number = 11; //D4 = pad with 0000 string outputValue = String.Format("{0:D4}", number); 代替Descendants

Elements

List<string> list = doc.Root.Descendants("account").Descendants() .Select(element => element.Value) .ToList(); 只返回元素的子元素(如果是根元素,则表示Elements)。
<main>返回元素内的整个树。

:您必须将代码Descendants修改为<motto>Hello Everyone>

答案 1 :(得分:2)

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

答案 2 :(得分:2)

这适用于您的示例(但您需要关闭此代码<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,来获取值。

假设您有班级帐号:

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;
 }

答案 3 :(得分:0)

试试这个

+-------+-------+------+
| list  | type  | date |
+-------+-------+------+
| a1    | a     | 1    |
| a2    | a     | 2    |
| a3    | a     | 3    |
| a4    | a     | 4    |
| a5    | a     | 5    | 
| a6    | a     | 6    |
| ...   | ...   | ...  |
| a(n-1)| a     | (n-1)|
| an    | a     | n    |
| b1    | b     | 1    |
| b2    | b     | 2    |
| b3    | b     | 3    |
| b4    | b     | 4    |
| b5    | b     | 5    | 
| b6    | b     | 6    |
| ...   | ...   | ...  |
+-------+-------+------+