2016-07-29 20 views
1

Ich möchte dies konvertieren:ersetzen neue Zeilen mit "" in C#

<translation> 
     1 Sənədlər 
    </translation> 

zu <translation>1 Sənədlər</translation> in XML mit C#.

Bitte helfen Sie mir. Nur Übersetzungs-Tags
ich versucht, dieses:

XDocument xdoc = XDocument.Load(path); 
     xdoc.Save("path, SaveOptions.DisableFormatting); 

Aber es die neuen Linien zwischen <translation> Tags nicht entbindet.

+0

BITTE verwenden Sie die Formatierungshilfe und die Vorschau, um sicherzustellen, dass Ihre Frage mindestens leserlich aussieht, BEVOR Sie sie posten. –

+0

danke @ J.Steen – user1870169

+0

Ersetzen Sie 'System.Environment.NewLine' durch' '' 'vielleicht? – Alkasai

Antwort

2

Eine neue Zeile wird im Code von "\n" und möglicherweise auch "\r" bestimmt. Sie können diese einfach entfernen:

string xmlString = "<translation>\r\n1 Sənədlər\r\n</translation>"; // With the 'new lines' 

xmlString = xmlString.Replace("\r", "").Replace("\n", ""); 

Dies führt zu:

<translation> 
1 Sənədlər 
</translation> 

becomming:

<translation>1 Sənədlər</translation> 

Ich hoffe, das hilft.

+0

Dies kann versehentlich für diese spezifische Zeichenfolge funktionieren, wird aber * Daten * innerhalb von 'CDATA'-Abschnitten tatsächlich * mangeln *. Es wird auch nicht benötigt - XML ​​ignoriert Zeilenumbrüche genauso wie HTML. Sie müssen die codierten Formulare (& # xD, & # xA) verwenden, wenn sie beibehalten werden sollen. –

+0

@PanagiotisKanavos XML ignoriert Zeilenumbrüche * nicht als Teil des Textinhalts *. Wenn sie ignoriert würden, würde die Frage nicht existieren. –

+0

vielen Dank. es funktioniert @MasterXD – user1870169

3

was Sie haben, sollte funktionieren. Sie können dies überprüfen, indem Sie das XDocument in einer Zeichenfolgenvariablen ablegen, um zu überprüfen, ob SaveOptions die Formatierung entfernt.

für zB: Ich habe versucht, die unten und Inhalt hat keine Formatierung einschließlich Zeilenumbrüche und Leerzeichen.

 XDocument xmlDoc = new XDocument(new XElement("Team", new XElement("Developer", "Sam"))); 
     var content = xmlDoc.ToString(SaveOptions.DisableFormatting); 
0

Sie können manuell Zeilenumbrüche Streifen aus in einer Umgebung sensitiv durch

var content = xmlString.Replace(Environment.NewLine, string.Empty) 
+0

Erstens, ein XML-Dokument hat keine Umgebung. Zweitens wird das Ersetzen solcher Zeichen wahrscheinlich CDATA-Abschnitte unterbrechen. Drittens ignoriert XML * Zeilenumbrüche auf jeden Fall. Sie müssen die kodierten Formulare verwenden (zB '& # xD'), wenn Sie Zeilenumbrüche beibehalten möchten –

0

XML definiert zwei Arten von Leerzeichen: signifikant und unbedeutend:

Insignificant Leerzeichen ist die Leerzeichen zwischen den Elementen wo Textinhalt nicht auftritt, während signifikante Leerzeichen der Leerraum innerhalb von Elementen ist, die Textinhalt enthalten. Sie können die Grafik in this article nützlich finden, um den Unterschied zu zeigen.

Was Sie in Ihrem translation Element haben, ist signifikant Whitespace; Das Element enthält Text, sodass davon ausgegangen wird, dass es Teil des Inhalts des Elements ist. Ohne ein Schema oder eine DTD, die besagt, dass es reduziert werden kann, wird keine Menge die Whitespace-Behandlung beim Lesen oder Schreiben ändern, dies entfernen. Diese Optionen beziehen sich nur auf den unbedeutenden Leerzeichen.

Was können Sie tun, ist Ihre eigene Verarbeitung gelten: LINQ to XML verwenden, können Sie den Leerraum aller Elemente trimmen, die nur Text so etwas wie dieses enthalten, wobei man:

var textElements = doc.Descendants() 
    .Where(element => element.Nodes().All(node => node is XText)); 

foreach (var element in textElements) 
{ 
    element.Value = element.Value.Trim(); 
} 

Siehe this fiddle für eine Demo.