Мне нужно обработать/сгладить входящий XML-код определенным образом.Сгладить xml с текстовыми и узлами элементов, используя LINQ to XML
Источник XML:
<paragraph>
This <content styleCode="Underline">is</content>
<content styleCode="Italic">
<content styleCode="Underline">
<content styleCode="Bold">hello</content> world
</content> test</content> <content styleCode="Bold">example</content> here.
</paragraph>
Target XML:
<paragraph>
This <content styleCode="underline">is</content> <content styleCode="italic underline bold">hello</content> <content styleCode="italic underline">world</content> <content styleCode="italic">test</content> <content styleCode="Bold">example</content> here.
</paragraph>
Я предпочел бы использовать LINQ для XML, но реализовать детей текстовые узлы рядом с content
узлы элементов делают это все различные задачи в настоящее время.
Еще одна идея у меня было использовать регулярные выражения, чтобы объединить InnerXml на каждом шагу, вставив закрытия </content>
до того дочернего узла и открытия <content>
сразу после него, обновить styleCode атрибуты соответственно, затем и удалить старый узел. Мне тоже не удалось это сделать.
Любые идеи, решения очень ценятся.
Кроме объединения и уплощение content
узлов, у меня есть к нижнему регистру комбинированных styleCode атрибуты, это самая легкая часть, очевидно:
XDocument xml = XDocument.Parse(sourceXml);
XName contentNode = XName.Get("content", "mynamespace");
var contentNodes = xml.Descendants(contentNode);
var renames = contentNodes.Where(x => x.Attribute("styleCode") != null);
foreach (XElement node in renames.ToArray())
{
node.Attribute("styleCode").Value = node.Attribute("styleCode").Value.ToLower();
}
У вас есть контроль над XML? Вы можете попробовать обернуть текст в '' в теге 'CDATA', но если вам понадобится некоторая гимнастика, чтобы манипулировать дочерними элементами' '. –
Tim
Я не контулирую исходный XML, я мог бы обернуть его в CDATA для обработки, хотя, я ищу эту «гимнастику», хотя –
Нет других тегов внутри? Только «контент», правильно? – SergeyS