1 votes

Créer un sous-arbre XML à partir d'une chaîne de caractères en LINQ ?

Je veux modifier tous les noeuds de texte en utilisant certaines fonctions en C#. Je veux insérer un autre sous-arbre xml créé à partir d'une chaîne.

Par exemple, je veux changer ceci

<root>
this is a test
</root>

à

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

J'ai ce morceau de code, mais il insère un nœud de texte, je veux créer un sous-arbre xml et l'insérer à la place du nœud de texte brut.

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));
}

2voto

Jonatan Lindén Points 801

Vous pouvez diviser le nœud XText original en plusieurs, et ajouter un XElement entre les deux. Ensuite, vous remplacez le nœud d'origine par les trois nouveaux nœuds.

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);

0voto

Priyank Bolia Points 3825

Je suppose CreateDocumentFragment est beaucoup plus facile, bien qu'il ne soit pas LINQ, mais l'idée d'utiliser LINQ n'est que de la facilité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X