2016-07-29 26 views
1

我想轉換此:使用C#更換新品系 「」 在C#

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

<translation>1 Sənədlər</translation>在XML。

請幫幫我。只有翻譯標籤。
我嘗試這樣做:

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

但它不會刪除<translation>標籤之間的新線路。

+0

請使用格式化幫助和預覽,以確保您的問題看起來至少清晰,然後再發布。 –

+0

謝謝@ J.Steen – user1870169

+0

嘗試用'「」替換'System.Environment.NewLine'''也許? – Alkasai

回答

2

代碼中的新行由「\n」確定,也可能還有「\r」。你可以簡單地刪除這些:

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

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

這將導致:

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

Becomming:

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

我希望這有助於。

+0

這可能會意外地爲這個特定的字符串工作,但實際上* mangle *在'CDATA'部分中找到的數據。它也不需要 - XML像HTML一樣忽略換行符。如果您希望將它們保留,您必須使用編碼形式(&#xD,&#xA) –

+0

@PanagiotisKanavos XML不會忽略換行符*作爲文本內容*的一部分。如果他們被忽視,這個問題就不存在了。 –

+0

非常感謝。它的工作原理@MasterXD – user1870169

3

你應該有什麼工作。您可以通過將XDocument轉儲到字符串變量來驗證SaveOptions是否刪除格式。

例如:我嘗試了下面的內容,並且內容沒有任何格式,包括換行符和空格。

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

可以通過使用

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

首先,XML文檔沒有環境。其次,替換這些字符可能會破壞'CDATA'部分。第三,XML *無論如何都會忽略*換行符。如果要保留換行符,則必須使用編碼形式(例如'&#xD') –

0

XML手動剔除換行符的環境敏感的方式定義了兩種類型的空白的:顯著和微不足道:

不重要的空白是元件之間的空白文本內容不會出現,而重要的空白是包含文本內容的元素中的空白。您可能會發現this article中的圖形可用於顯示不同之處。

你在你的translation元素中有什麼是重要 whitespace;該元素包含文本,因此它被假定爲元素內容的一部分。如果沒有表明它可以被摺疊的模式或DTD,那麼在讀取或寫入時不會改變空白處理的數量就會將其刪除。這些選項僅與不重要的空白有關。

你可以做的是應用自己的處理:使用LINQ to XML,可以修剪只含有使用這樣的文本的所有元素的空白:

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

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

的演示中看到this fiddle