Visual Studio 2010,Silverlight 4和C#。我将以下数据存储在XML文件中:
<root>
<element>TextHere</element>
<element>TextHere</element>
<element>TextHere</element>
</root>
这是我目前的代码。
XDocument xmlDoc = XDocument.Load("XMLDocument.xml");
var ElementsList = from Elements in xmlDoc.Descendants("root")
select new
{
ElementContent = Elements.Element("Element").Value,
};
此代码仅将第一个元素放在列表中,而将所有其他元素保留在列表中。如何重写此代码以便它将捕获XML文件中名为“element”的所有元素?
答案 0 :(得分:5)
这样就可以了:
XDocument xmlDoc = XDocument.Load("XMLDocument.xml");
var ElementsList = from Elements in xmlDoc.Descendants("element")
select new
{
ElementContent = Elements.Value
};
或者用点符号简洁一点:
var ElementsList = xmlDoc.Descendants("element")
.Select(x => new { ElementContent = x.Value });
但是请注意,在此之后您只有一个元素的枚举,如果您想要一个列表(如您的变量名所示),您可以在选择后添加.ToList()
:
var ElementsList = xmlDoc.Descendants("element")
.Select(x => new { ElementContent = x.Value })
.ToList();
这个列表将包含3个元素(基于您的示例XML)。
)具有ElementContent
属性的匿名类型。如果你不需要那个属性(我认为你不需要),这是一个只返回字符串列表的简化版本:
var ElementsList = xmlDoc.Descendants("element")
.Select(x => x.Value)
.ToList();
答案 1 :(得分:2)
这样做 -
XDocument xmlDoc = XDocument.Load("XMLDocument.xml");
var ElementsList = from Elements in xmlDoc.Descendants("root")
select new
{
Element1 = (string)Elements.Element("element"),
Element2 = Elements.Element("element").ElementsAfterSelf("element").First().Value,
Element3 = Elements.Element("element").ElementsAfterSelf("element").ElementAt(1).Value,
};