在LINQ中从字符串创建XML子树?

时间:2009-12-13 13:09:48

标签: c# xml linq

我想使用C#中的一些函数修改所有文本节点。 我想插入另一个从某个字符串创建的xml子树。

例如,我想改变这个

<root>
this is a test
</root>

<root>
this is <subtree>another</subtree> test
</root>

我有这段代码,但它插入了文本节点,我想创建xml子树并插入而不是纯文本节点。

List<XText> textNodes = element.DescendantNodes().OfType<XText>().ToList();
foreach (XText textNode in textNodes)
{
    String node = System.Text.RegularExpressions.Regex.Replace(textNode.Value, "a", "<subtree>another</subtree>");
    textNode.ReplaceWith(new XText(node));
} 

2 个答案:

答案 0 :(得分:2)

您可以将原始XText节点拆分为多个,并在其间添加XElement。然后用三个新节点替换原始节点。

List<XNode> newNodes = Regex.Split(textNode.Value, "a").Select(p => (XNode) new XText(p)).ToList();

newNodes.Insert(1, new XElement("subtree", "another")); // substitute this with something better

textNode.ReplaceWith(newNodes);

答案 1 :(得分:0)

我猜CreateDocumentFragment更容易,但不是LINQ,但使用LINQ的想法很简单。