我目前正在向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。
问题是我相信将这些字符串添加为“>”进入& lt;和'>'进入& gt;
为了解决这个问题,我尝试将它们替换出来:
foreach (XElement x in currentXML.Descendants("NameAddressRecord"))
{
newXML.WriteRaw(x.ToString().Replace("<", "<").Replace(">", ">"));
}
但我遇到了一个问题,其他一些数据实际上正在使用这些符号并转换它们会破坏XML的完整性。是否有任何方法可以轻松替换此值而不会丢失XML格式,并且每次我都不需要重新使用此节点?
答案 0 :(得分:2)
您可以使用XElement.Parse()
来获得正确的格式:
x4.Add(XElement.Parse(newDateXML.ToString().Replace("YYYYMMDD", "20120908")));
我在LinqPad
尝试了这一点,它似乎正在做正确的事。
答案 1 :(得分:0)
您可以尝试使用WriteCData
伪:
newXml.WriteStartElement(x)
newXml.WriteCData(mySTringToStore)
newXml.WriteEndElement
答案 2 :(得分:0)
是的,你需要把它写成Cdatastring。 CDATA中包含的任何内容,解析器都会忽略它。所以你提到的任何javascript代码或值应该在CDATA部分