2011-06-02 6 views
3

Comment puis-je analyser les caractères undesireable d'une collection de données?Comment remplacer CRLF avec un espace?

Je travaille avec le code VB.NET existant pour une application Windows qui utilise StreamWriter et sérialiseur pour produire un document XML de données de transaction. Code ci-dessous.

Private TransactionFile As ProjectSchema.TransactionFile 
Dim Serializer As New Xml.Serialization.XmlSerializer(GetType (ProjectSchema.TransactionFile)) 
Dim Writer As TextWriter 
Dim FilePath As String 
Writer = New StreamWriter(FilePath) 
Serializer.Serialize(Writer, TransactionFile) 
Writer.Close() 

Le document XML est en cours de téléchargement dans une autre application qui n'accepte pas "crlf".

Le « TransactionFile » est une collection de données dans une classe nommée ProjectSchema.TransactionFile. Il contient différents types de données. Il existe 5 fonctions pour créer des nœuds qui contribuent à la création d'un fichier de transaction principal nommé TransactionFile

Je dois trouver des caractères CRLF dans la collection de données et remplacer les caractères CRLF par un espace.

Je suis en mesure de remplacer des caractères illégaux au niveau du terrain avec:

.Name = Regex.Replace((Mid(CustomerName.Name, 1, 30)), "[^A-Za-z0-9\-/]", " ") 

Mais j'ai besoin de frotter la collection de données.

Si je tente:

TransactionFile = Regex.Replace(TransactionFile, "[^A-Za-z0-9\-/]", " ") 

Parce que TransactionFile ne peut pas être converti en chaîne, je reçois un message "Conversion de type 'transaction' taper 'String' est pas valide".

Bottom Line = Comment puis-je remplacer CRLF un espace quand il apparaît dans les données TransactionFile?

+0

Vous * pourriez * pouvoir encoder les champs incriminés dans les balises CDATA. Peut-être que le service consommateur est correct avec CRLF dans CDATA mais pas dans les champs non-cdata. –

Répondre

2

Ne pas le faire de cette façon. Créez le sérialiseur avec XmlWriter.Create(). Qui a une surcharge qui accepte un objet XmlWriterSettings. Qui a beaucoup d'options pour mettre en forme le XML généré. Comme NewLineChars, il vous permet de définir les caractères à utiliser pour une fin de ligne.

1

Comme Hans dit, mess avec les XmlWriterSettings. Le meilleur choix suivant est d'écrire le fichier, puis de lire le fichier dans un objet XML et de le traiter élément par élément. Cela vous permettrait de supprimer crlf de l'intérieur des éléments individuels, mais laissez ceux entre les éléments seuls, par exemple.

Une autre possibilité - plutôt que d'écrire directement dans le fichier, vous pouvez faire une chaîne intermédiaire, et faire un remplacement en ce que:

 Dim ms As New MemoryStream 
     Serializer.Serialize(ms, TransactionFile) 

     ms.Flush() 
     ms.Position = 0 

     Dim sr As New StreamReader(ms) 
     Dim xmlString As String = sr.ReadToEnd 

     sr.Close() ' also closes underlying memorystream 

Ensuite, vous pouvez faire votre regex remplacer le xmlString avant de l'écrire à un fichier. Cela devrait obtenir toutes les paires crlf, à la fois dans les éléments et entre.

Questions connexes