着信xmlを特定の方法で処理/平坦化する必要があります。LINQ to XMLを使用してテキストノードと要素ノードで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>
ターゲット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>
私はXMLにLINQを使用することを好むが、content
要素ノードの隣の子供のテキストノードが今、すべての異なるタスク作る実現します。
私が持っていたもう一つのアイデアはそして、それに応じて属性styleCodeを更新し、その直後に子ノードと開口部<content>
前</content>
を閉じる挿入することによって、各段階でInnerXmlプロパティを組み合わせることが、正規表現を使用し、古いノードを削除することでした。私はこの考え方にも成功していません。
すべてのアイデア、解決策は非常に高く評価されています。
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