0

我目前正在向 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;", ">"));
}

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

4

3 回答 3

2

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

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

我试过这个,LinqPad它似乎在做正确的事情。

于 2012-09-11T21:00:43.873 回答
0

您可以尝试使用 WriteCData

伪:

newXml.WriteStartElement(x)
newXml.WriteCData(mySTringToStore)
newXml.WriteEndElement
于 2012-09-11T20:29:10.703 回答
0

是的,您需要将其写为 Cdatastring。CDATA 中包含的任何内容,解析器都会忽略它。所以任何像你提到的那样的javascript代码或值都应该在CDATA部分

于 2012-09-11T20:55:40.647 回答