Чтение текстового содержимого из XElement

В.NET, как читать текстовый контент из XElement?

Например, из XElement

XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>")

Я бы хотел, чтобы строка "Алиса и Боб"


Я попробовал element.Value но это возвращает "Alice & Bobcat" :(

Ответ 1

 XElement t = XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>");
 string s = (t.FirstNode as XText).Value;

Ответ 2

Просто потому, что у меня недавно было подобное требование, я предлагаю:

var x = XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>")
var text = string.Concat(x.Nodes().OfType<XText>().Select(t => t.Value));

Не будет захватывать текстовое содержимое дочерних узлов, но будет конкатенировать все немаркированные текстовые узлы в текущем элементе.

Ответ 3

Попробуйте следующий код. Это может помочь вам.

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            var parent = XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>");
            var nodes = from x in parent.Nodes()
                            where x.NodeType == XmlNodeType.Text
                            select (XText)x;

            foreach (var val in nodes)
            {
                Console.WriteLine(val.Value);
            }
            Console.ReadLine();
        }
    }
}

Ответ 4

Используя element.FirstNode вы можете получить исходный контент, который у вас есть внутри элемента "Alice & Bob", поэтому вам нужно только "unescape" амперсанд, и вы получите результат, которого вы ожидаете.

Ответ 5

XElement t= XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>");
string s = t.FirstNode.ToString();