Использование LINQ to XML для чтения текста из файла XML - PullRequest
2 голосов
/ 17 ноября 2010

У меня есть 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) для чтения этого файла. Что мне нужно, так это «текст» в корневом элементе «Это начало списка детей». Однако, когда я проверяю атрибут Value элемента XElement со ссылкой на Root, я получаю следующее:

Это начало списка детей. ABC Это конец списка детей.

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 17 ноября 2010
var doc = XDocument.Parse(xml);
var ele = doc.Element("Root");
string whatUWant = ele.FirstNode.ToString();

Это может удовлетворить ваши требования.

Кстати, Root.Value означает все значение узла "Root", поэтому вы получили такой результат.Я догадываюсь.

2 голосов
/ 17 ноября 2010

Если вам просто нужен первый текстовый узел (игнорируя «Это конец списка дочерних элементов», который все еще является текстом в корневом элементе), вы можете использовать:

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

Обратите внимание, что он будет содержать пробелы, поэтому вы можете его обрезать. Также предполагается, что - это хотя бы один текстовый узел.

...