2009-09-17 13 views
0

Comment puis-je supprimer des espaces sur chaque instance d'un nœud particulier que je spécifie en C#? Par exemple, disons que j'ai le document XML suivant:Supprimer des espaces de nœuds XML

<XML_Doc> 

    <Record_1> 
    <Name>Bob</Name> 
    <ID_Number>12345</ID_Number> 
    <Sample> 
    </Sample> 
    </Record_1> 

    <Record_2> 
    <Name>John</Name> 
    <ID_Number>54321</ID_Number> 
    <Sample> 
    </Sample> 
    </Record_2> 

</XML_Doc> 

Ce que je voudrais est de prendre toutes les instances de la balise <Sample> et changer la mise en forme de sorte qu'il ressemble à ceci:

<XML_Doc> 

    <Record_1> 
    <Name>Bob</Name> 
    <ID_Number>12345</ID_Number> 
    <Sample></Sample> 
    </Record_1> 

    <Record_2> 
    <Name>John</Name> 
    <ID_Number>54321</ID_Number> 
    <Sample></Sample> 
    </Record_2> 

</XML_Doc> 

EDIT:

L'autre application qui utilise le fichier XML n'a pas été écrite par moi et je ne peux pas modifier la structure du document XML lui-même. J'écris un utilitaire qui analyse le fichier XML et remplace chaque instance du nœud que je spécifie. L'exemple où la balise <Sample></Sample> se trouve sur la même ligne est la façon dont le document est formaté à l'origine et dont j'ai besoin pour que l'autre application puisse le lire correctement.

+0

On ne sait pas si vous voulez avoir juste au format XML ou si vous souhaitez conserver whitepace et d'autres caractères dans le fichier XML. Votre exemple semble supprimer les espaces, pas le préserver. –

+0

Vous avez raison, j'ai déclaré les choses à l'envers. –

+0

Je ne vois aucun problème avec le xml d'origine. L'application ne doit pas se comporter différemment si le noeud de fermeture est sur une autre ligne par rapport à la même ligne. L'application utilisant ce fichier XML refuse-t-elle? – shahkalpesh

Répondre

1

Si vous souhaitez conserver les espaces (ex: tabulations, retours chariot et autres formats), vous pouvez utiliser les CDATA (données de caractères non analysées).

<![CDATA[ 
]]> 

Cependant, si vous voulez juste avoir un document XML qui est formaté d'une certaine manière à des fins esthétiques, je vous conseille de le laisser seul.

Pour écrire une section CDATA dans un document XML en utilisant le code suivant:

XmlNode itemDescription = doc.CreateElement("description"); 
XmlCDataSection cdata = doc.CreateCDataSection("<P>hello world</P>"); 
itemDescription.AppendChild(cdata); 
item.AppendChild(itemDescription); 

Ce produit

<description><![CDATA[<P>hello world</P>]]></description> 
0

Sur la base de vos commentaires, je pense que vous peut être en mesure d'utiliser la XmlWriterSettings.NewLineHandling propriété pour modifier la façon dont le noeud de texte gère les retours chariot. Vous devrez expérimenter. Je suspecte que l'application de réception a un certain problème d'analyse de ligne et recherche un \ r \ n ou quelque chose.

1

Je pense que vous voulez définir

xml.Settings.NewLineHandling = NewLineHandling.Entitize; 
1

Je suggère d'utiliser une transformation XSLT. Le faire de cette façon vous permet d'avoir le contrôle sur le décapage ou la préservation des espaces blancs.

MSDN a un article qui traite de cette question, voir: Controlling White Space with the DOM

Questions connexes