2016-08-03 1 views
1

Dans mon xml certains de l'élément XML sont vides, par exemple:convertir les balises Xml

<A></A> 

Je veux modifier les éléments qui sont du type représenté ci-dessus pour convertir en <A/> élément de type alors comment peut nous le faisons en C# et mettons à jour dans le fichier.

+1

lors de l'analyse du fichier xml en C# l'étiquette peut être identifiée comme méthode IsEmptyElement mais la balise ne peut être identifié par la méthode IsEmptyElement utilisant la classe XmlReader et dans le xml quelques éléments qui sont videra représentés comme et certains comme . Donc, pour maintenir la structure unique Nous voulons convertir les balises vides telles que en. Ainsi, si un nouvel utilisateur est en train de lire, il verra la structure unique –

+1

Copie possible de [Comment puis-je réduire les balises xml vides?] (Http: // stackoverflow.com/questions/198419/how-do-i-collapse-empty-xml-tags) – Default

Répondre

1

Voici ce que je suis venu avec:

private static void FormatEmptyNodes(XmlNode rootNode) 
{ 
    foreach (XmlNode childNode in rootNode.ChildNodes) 
    { 
     FormatEmptyNodes(childNode); 

     if(childNode is XmlElement) 
     { 
      XmlElement element = (XmlElement) childNode; 
      if (string.IsNullOrEmpty(element.InnerText)) element.IsEmpty = true; 
     } 
    } 
} 

utiliser ensuite comme ceci:

var doc = new XmlDocument(); 
doc.Load(inputFilePath); 
FormatEmptyNodes(doc); 
doc.Save(outputFilePath); 
0

Pendant que vous shouldn't use Regex to parse HTML (or XHTML, XML...), dans votre scénario, vous pouvez l'utiliser pour nettoyer vos chaînes entrantes en utilisant le modèle <([A-Za-z0-9_.]+)></\\1> et un remplacement de <$1/>:

System.Text.RegularExpressions.Regex.Replace(
    "foo <a></a> bar <a>not empty</a> <tag></tag>", 
    "<([A-Za-z0-9_.]+)></\\1>", 
    "<$1/>") 

Cela renverra:

foo <a/> bar <a>not empty</a> <tag/> 

Le regex peut être comprise comme illustré ci-dessous (image générée par Regexper):

Regex explained