2012-09-11 33 views
0

我正在向XML文件添加一個新節點。由於該節點要稍微動,我創建了一個StringBuilder和我使用的XmlWriter創建節點:C#XmlWriter到StringBuilder HTML實體

StringBuilder newDateXML = new StringBuilder(); 
XmlWriter newDateXMLWriter = XmlWriter.Create(newDateXML, xmlWriterSettings); 
newDateXMLWriter.WriteStartElement("Dates"); 
newDateXMLWriter.WriteElementString("type", "UNDEFINED"); 
newDateXMLWriter.WriteElementString("value", "YYYYMMDD"); 
newDateXMLWriter.WriteStartElement("additionalDateFields"); 
newDateXMLWriter.WriteStartElement("AdditionalDateFields"); 
newDateXMLWriter.WriteAttributeString("order", "1"); 
newDateXMLWriter.WriteElementString("type", "Original Type"); 
newDateXMLWriter.WriteElementString("value", "Date Added"); 
newDateXMLWriter.WriteEndElement(); 
newDateXMLWriter.WriteEndElement(); 
newDateXMLWriter.WriteEndElement(); 
newDateXMLWriter.Flush(); 

每當我想要添加的節點,我用這些來代替我想要的價值,並將其添加到文件:

x4.Add(newDateXML.ToString().Replace("YYYYMMDD", dictionary[x3.Element("value").Value])); 

其中x4是XElement,x3是包含我的查找值的XElement。

問題是我相信把這些添加爲一個字符串是把我的'>'變成& lt;和'>'轉換成& gt;

爲了解決這個問題,我試圖取代它們像這樣:

foreach (XElement x in currentXML.Descendants("NameAddressRecord")) 
{ 
    newXML.WriteRaw(x.ToString().Replace("&lt;", "<").Replace("&gt;", ">")); 
} 

但是我在一些其他的數據實際上是用那些符號和轉換他們是打破了XML完整性遇到了一個問題。有什麼方法可以輕鬆地替換掉這個值而不會丟失XML格式,並且每次我想使用它時都不必重新創建這個節點?

+0

[Linq2Xml](http://msdn.microsoft.com/en-us/library/bb387098.aspx) –

回答

2

您可以使用XElement.Parse()得到正確的格式:

x4.Add(XElement.Parse(newDateXML.ToString().Replace("YYYYMMDD", "20120908"))); 

LinqPad嘗試這樣做,它似乎是在做正確的事。

0

您可以嘗試使用WriteCData

僞:

newXml.WriteStartElement(x) 
newXml.WriteCData(mySTringToStore) 
newXml.WriteEndElement 
0

是的,你需要編寫爲Cdatastring。 任何包含在CDATA中的東西,解析器都會忽略它。所以任何JavaScript代碼或值,像你提到的應該是在CDATA節中的一個