我想使用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));
}
答案 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的想法很简单。