我需要将一些代码放入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;
答案 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 |
| ... | ... | ... |
+-------+-------+------+