C#XmlWriter到StringBuilder HTML实体

C#XmlWriter到StringBuilder HTML实体,c#,xml,linq-to-xml,stringbuilder,xmlwriter,C#,Xml,Linq To Xml,Stringbuilder,Xmlwriter,我目前正在向XML文件添加一个新节点。由于节点必须稍微动态,因此我创建了一个StringBuilder,并使用XmlWriter创建节点: StringBuilder newDateXML = new StringBuilder(); XmlWriter newDateXMLWriter = XmlWriter.Create(newDateXML, xmlWriterSettings); newDateXMLWriter.WriteStartElement("Dates"); newDateXM

我目前正在向XML文件添加一个新节点。由于节点必须稍微动态,因此我创建了一个StringBuilder,并使用XmlWriter创建节点:

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

问题是,我认为将它们作为字符串添加会将我的“>”变成<;并将“>”转换为>

为了解决这个问题,我尝试如下替换它们:

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

但我遇到了一个问题,其他一些数据实际上正在使用这些符号,而转换它们会破坏XML的完整性。是否有任何方法可以轻松替换掉此值,而不丢失XML格式,并且不必每次使用时都重新创建此节点?

您可以尝试使用WriteCData

伪:

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

是的,你需要把它写成CDATA字符串。
CDATA中包含的任何内容,解析器都会忽略这一点。因此,您提到的任何javascript代码或值都应该位于CDATA部分

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

x4.Add(XElement.Parse(newDateXML.ToString().Replace("YYYYMMDD", "20120908")));
我在
LinqPad
中尝试了这个,它似乎做了正确的事情