Как в .NET прочитать текстовое содержимое из XЭлемент?
Например, из XElement
XElement.Parse("<tag>Alice & Bob<other>cat</other></tag>")
Я хотел бы строку «Алиса и Боб»
Я пробовал element.Value
, но это возвращает "Алиса и Рысь" :(
Как в .NET прочитать текстовое содержимое из XЭлемент?
Например, из XElement
XElement.Parse("<tag>Alice & Bob<other>cat</other></tag>")
Я хотел бы строку «Алиса и Боб»
Я пробовал element.Value
, но это возвращает "Алиса и Рысь" :(
Просто потому, что у меня недавно было подобное требование, я предлагаю:
var x = XElement.Parse("<tag>Alice & Bob<other>cat</other></tag>")
var text = string.Concat(x.Nodes().OfType<XText>().Select(t => t.Value));
Не захватывает текстовое содержимое дочерних узлов, но объединяет все непомеченные текстовые узлы в текущем элементе.
Попробуйте следующий код. Это может вам помочь.
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
var parent = XElement.Parse("<tag>Alice & 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();
}
}
}
Используя element.FirstNode
, вы можете получить необработанный контент, который у вас есть внутри элемента «Алиса и Боб», поэтому вам нужно только «отключить экранирование» амперсанда, и вы получите ожидаемый результат.
tag
имеет два дочерних узла, один текстовый узел и один элементный узел. Проблема усложняется с DTD или схемами, и в этом случае может быть невозможно точно указать такой формат. - person GrandOpener   schedule 05.04.2017