2009-09-29 7 views
4

J'ai la chaîne qui fait partie d'un xml. Le problème est que je veux extraire de la chaîne les parties qui ne sont pas dans les balises. donc j'ai besoin d'extraire la chaîne "aceg" de cette chaîne et laisser les caractères "bdf" comment cela peut-il être fait?besoin de supprimer les nœuds xml dans une chaîne et laisser le texte

Edit: cela faisait partie d'un xml laisser Asume son

<div>a<b>b</b>c<i>d</i>e<b>f</b>g</div> 

maintenant est un xml valide :)

+4

Est-ce XML valide? – rahul

+0

c'était un html et non pas du xml mais nous pouvons le rendre valide en l'enfermant dans un tag div pour qu'il devienne.

abcdefg
Karim

Répondre

4

Cette chaîne n'est pas un fichier XML valide.

Cependant, en supposant avait une chaîne XML valide, alors vous pouvez faire quelque chose comme ceci:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string contents = string.Empty; 

     XmlDocument document = new XmlDocument(); 
     document.LoadXml("<outer>a<b>b</b>c<i>d</i>e<b>f</b>g</outer>"); 

     foreach(XmlNode child in document.DocumentElement.ChildNodes) 
     { 
      if (child.NodeType == XmlNodeType.Element) 
      { 
       contents += child.InnerText; 
      } 
     } 

     Console.WriteLine(contents); 

     Console.ReadKey(); 
    } 
} 

Cette imprimera la chaîne « BDF »

+0

celui-ci fonctionne mais il fonctionne à l'envers. je veux dire qu'il extrait la chaîne "bdf" mais si vous changez la condition "child.NodeType == XmlNodeType.Element" à "child.NodeType == XmlNodeType.Text" il retournera le résultat nécessaire – Karim

4

L'expression régulière suivante supprime tous les tags de la chaîne:

Regex.Replace("a<b>b</b>c<i>d</i>e<b>f</b>g", "<[^>]+>", string.Empty); 
+0

J'ai essayé ce code et il renverra "abcdefg" mais je dois enlever le texte qui est dans les étiquettes. donc je l'ai besoin pour retourner "aceg" – Karim

+0

En fait ce qu'il veut est ce pour remplacer les balises et le texte interne, donc: <.*?>. *? <.*?> – pauloya

+0

Le traitement XML avec regex est une mauvaise idée. Si ces balises peuvent contenir des attributs, ou quelque chose comme des commentaires, une telle expression peut mal tourner. – bobince

0

Suite de @ réponse de Stoo vous devriez être capable d'omettre le contenu de la balise ainsi avec quelque chose comme ceci:

Regex.Replace("a<b>b</b>c<i>d</i>e<b>f</b>g", "<[^>]+>[^<]+</[^>]+>", string.Empty); 
+0

celui-ci fonctionne mais j'irai pour la solution xml de sgrassie car cela me donne plus de contrôle sur les éléments – Karim

Questions connexes