使用LINQ to XML从XML文件中读取文本

时间:2010-11-17 06:23:51

标签: c# xml c#-4.0 linq-to-xml

我有一个像这样的XML文件:

<Root>
   This is beginning of list of children.   
   <Children>
      <Child Name="a">A</Child>
      <Child Name="b">B</Child>
      <Child Name="c">C</Child>
   </Children>
   This is end of list of children. 
</Root>

我正在使用LINQ to XML(XDocument)来读取此文件。我需要的是根元素中的“文本”,“这是孩子列表的开头”。但是当我检查引用Root的XElement的Value属性时,我得到以下内容:

  

这是孩子名单的开头.ABCT这是孩子名单的结尾。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果您只想要第一个文本节点(忽略“这是子项列表的结尾”,它仍然是根元素中的文本),您可以使用:

var text = (string) doc.Root.Nodes()
                            .OfType<XText>()
                            .First()
                            .Value;

请注意,这将包含空格,因此您可能需要修剪它。它还假设 至少有一个文本节点。

答案 1 :(得分:2)

var doc = XDocument.Parse(xml);
var ele = doc.Element("Root");
string whatUWant = ele.FirstNode.ToString();

这可能满足您的要求。

BTW,Root.Value表示节点“Root”的整个值,因此您得到了类似的结果。我猜。