2010-02-18 102 views
4

我解析XML字符串成看起來像這樣一個XDocument(使用XDocument.Parse)編碼XML元素中的雙引號使用LINQ to XML

<Root> 
    <Item>Here is &quot;Some text&quot;</Item> 
</Root> 

然後我處理XML了一下,我希望把它送回來了作爲一個字符串,就像它排在

<Root> 
    <Item>Here is &quot;Some text&quot;</Item> 
    <NewItem>Another item</NewItem> 
</Root> 

然而,我所得到的是

<Root> 
    <Item>Here is \"Some text\"</Item> 
    <NewItem>Another item</NewItem> 
</Root> 

注意雙引號現在如何轉義而不是編碼?

出現這種情況我是否使用

ToString(SaveOptions.DisableFormatting); 

var stringWriter = new System.IO.StringWriter(); 
xDoc.Save(stringWriter, SaveOptions.DisableFormatting); 
var newXml = stringWriter.GetStringBuilder().ToString(); 

怎樣纔可以有雙引號出來爲&quot;,而不是\"

UPDATE:也許這可以更好地解釋:

var origXml = "<Root><Item>Here is \"Some text&quot;</Item></Root>"; 
Console.WriteLine(origXml); 
var xmlDoc = System.Xml.Linq.XDocument.Parse(origXml); 
var modifiedXml = xmlDoc.ToString(System.Xml.Linq.SaveOptions.DisableFormatting); 
Console.WriteLine(modifiedXml); 

輸出我從這個得到的是:

<Root><Item>Here is "Some text&quot;</Item></Root> 
<Root><Item>Here is "Some text"</Item></Root> 

我所要的輸出是:

<Root><Item>Here is "Some text&quot;</Item></Root> 
<Root><Item>Here is "Some text&quot;</Item></Root> 
+2

實際上,我並不特別明白這兩者的必要性。無論如何,'"'只在屬性值中需要。 – Joey 2010-02-18 22:03:31

+0

那麼,你可能是對的。我正在用我的XML字符串讀取的第三方工具發生錯誤。我能看到的唯一不同之處就是雙引號在XML字符串中的樣子。我希望將他們從\「改爲"將工作 - 但它似乎並沒有工作。 – davekaro 2010-02-19 14:10:16

+0

我已經在VB.NET基於上述測試(從XDocument.Parse讀取字符串XML,添加一個新的XElement,寫回到一個字符串,保存字符串),它的工作很好,只是雙引號,並沒有擒縱機構。除了上述有什麼可以幫助解決問題嗎? – 2010-02-20 01:28:30

回答

0

未經測試,不知道這是否適合您,但請嘗試更換這

var origXml = "<Root><Item>Here is \"Some text&quot;</Item></Root>"; 

與此

var origXml = "<Root><Item>Here is \"Some text&amp;quot;</Item></Root>"; 
2

您應該使用XmlWriter確保字符正確編碼。但是,我不確定您是否可以得到您想要的確切輸出,而無需滾動您自己的類來輸出文本。