2011-04-12 31 views
1

我正在使用XLinq(XML到Linq)解析xml文檔,文檔的一部分涉及表示富文本,並使用xml:space="preserve"屬性來保留富文本元素內的空白。爲什麼XLinq會重新格式化我的XML?

我遇到的問題是,當我只有一個包含子元素但沒有文本的RTF格式的文本時,XLinq會重新格式化xml並將其放在自己的行上。這當然會導致創建額外的空白區域,從而改變原始內容。

實例:

<rich-text xml:space="preserve"> 
    <text-run><br/></text-run> 
</rich-text> 

結果:

<rich-text xml:space="preserve"> 
    <text-run> 
     <br/> 
    </text-run> 
</rich-text> 

如果我添加一個空格或<br/>之前任何其他文本的原始XML像這樣

<rich-text xml:space="preserve"> 
    <text-run> <br/></text-run> 
</rich-text> 

解析器不重新格式化xml

<rich-text xml:space="preserve"> 
    <text-run> <br/></text-run> 
</rich-text> 

如何防止XML解析器重新格式化我的元素?

這是重新格式化正常的XML解析還是這只是一個不需要的XLinq解析器的副作用?

編輯: 我解析這樣的文件:

using (var reader = System.Xml.XmlReader.Create(stream)) 
    return XElement.Load(reader); 
我沒有使用任何自定義​​或 LoadOptions

當我使用.Value財產上的文本運行XElement出現該問題

獲取元素的文本值。相反,接收\n這將是從原始的XML輸出正確的,我會收到

\n \n

注意額外的空格和換行,由於重新格式化!在調試器中檢查元件或調用.ToString()時也可以觀察到格式化。

+0

你在哪裏觀察這個格式化?請在此XElement上顯示更多代碼。 – 2011-04-12 07:31:51

+0

增加了一些更多信息。 – 2011-04-13 00:06:03

+0

添加一些搜索關鍵字:'XElement.Parse'添加空格,縮進,製表符。 – 2017-12-20 20:11:32

回答

3

你有沒有嘗試過這樣的:

yourXElement.ToString(SaveOptions.DisableFormatting) 

這應該解決您的問題。

順便說一句 - 你也應該做負載類似的事情:

XElement.Parse(sr, LoadOptions.PreserveWhitespace); 
+0

+1用於思考加載問題。 – 2011-04-12 08:07:58

+0

謝謝,但這沒有幫助。我已經指示它通過xml:space =「preserve」屬性保留空白。問題不在於它沒有保留空間,而是它重新格式化了原始的XML,並且這樣做會引入額外的空白。不幸的是,SaveOptions.DisableFormatting也沒有幫助。 – 2011-04-13 00:05:47