【发布时间】:2013-12-25 18:03:55
【问题描述】:
使用 .net 4.5 VS 2012
我正在尝试从 XMl 文件中读取数据
<?xml version="1.0" encoding="utf-8"?>
<userCategories>
<Cat>General</Cat>
<Cat>Science</Cat>
<Cat>HelloWorld</Cat>
</userCategories>
这是我写的代码:
//create XML document from file
XDocument myCatList = XDocument.Load(categoryPath);
//get all categories using LINQ
var myCategories =
from element in myCatList.Descendants("userCategories")
//select all elements in XML where Element has name Cat - mean all if file like i write before
select element.Element("Cat").Value;
//create string for result
string data = String.Empty;
use foreach for getting all categories
foreach (var userCat in myCategories)
{
//put in one string
data += string.Format("{0}\n", userCat);
}
所以我认为这种 LINQ 请求必须返回一个包含所有值的字符串数据(General \n Science \n HelloWorld \n)。但结果我只得到了将军。
我错过了什么?为什么我只从 XML 中获取 Item General 而不是所有节点?
【问题讨论】:
-
顺便说一句。像这样使用
string +=真的很糟糕! -
@Thomas Weller 为什么? - 我只是将所有值添加到格式化字符串,然后使用它
-
因为字符串必须在每个循环周期中完全重新分配(非常慢并导致严重的内存碎片)。这就是
StringBuilder存在的原因。 -
对此表示感谢!使用
s.Append(userCat + '\n');where s -StringBuilder