В категории «это работает, но это грязно, и я не могу поверить, что я должен прибегнуть к этому»:
StringBuilder output = new StringBuilder();
foreach (XElement elem in node)
{
output.append(string.Join("", elem.Nodes().Select(n => n.ToString()).ToArray()));
}
Лично я думаю, что это требует метода расширения в XElement ...
UPDATE:
Если вы хотите исключить все теги элементов , за исключением , то вам нужно использовать рекурсивный метод для возврата значений узлов.
Вот ваше основное тело метода:
StringBuilder output = new StringBuilder();
foreach (XElement elem in node)
{
output.Append(stripTags(elem));
}
А вот стрип-теги:
private static string stripTags(XNode node)
{
if (node is XElement && !((XElement)node).Name.ToString().Equals("b", StringComparison.InvariantCultureIgnoreCase))
{
return string.Join(string.Empty, ((XElement)node).Nodes().Select(n => stripTags(n)).ToArray());
}
else
{
return node.ToString();
}
}
Таким образом, реальный ответ таков: нет, не существует простого способа сделать это с помощью LINQ to XML, но есть способ a ...