Я работал с этой проблемой сегодня часами, потому что BizTalk 2006 R2 интерпретирует
<XmlElement>
</XmlElement>
как перевод строки каретки и сколько места для отступа. Я наконец-то нашел способ использовать информацию, предоставленную о preservewhitespace, для создания этого решения. Важным примечанием является то, что preservewhitespace не влияет на XmlDocument до тех пор, пока на объекте не будет выполнено действие сохранения или загрузки. Для моего примера у меня был метод, который получил XmlDocument, манипулировал им и затем возвращал его:
public XmlDocument ManipulateIt (XmlDocument inDoc)
{
//This statement will result in a start and end node with /r/n and spaces in the xmldoc
inDoc["SomeNode"].InnerText = "";
//Create a new doc and set the preservewhitespace attribute to true (important to do before calling LoadXml
XmlDocument rtnDoc = new XmlDocument();
rtnDoc.PreserveWhitespace = true;
//When the OuterXml string is loaded into rtnDoc all extra whitespace is removed
rtnDoc.LoadXml(inDoc.OuterXml);
return(rtnDoc);
}
Делая это таким образом, когда inDoc загружается в rtnDoc, все лишние пробелы удаляются из xml, оставляя вам:
<XmlElement></XmlElement>
Я надеюсь, что это помогло кому-то еще работать с продуктами, которые по-разному анализируют XML. Немного раздражает, когда оба продукта производятся одной и той же компанией.
(Надеюсь, я добавил достаточно ключевых слов к этому сообщению, чтобы помочь следующему человеку найти его)