【问题标题】:C# XmlWriter to StringBuilder HTML EntitesC# XmlWriter 到 StringBuilder HTML 实体
【发布时间】:2012-09-11 20:23:44
【问题描述】:

我目前正在向 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 ;和 '>' 变成 >

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

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

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

【问题讨论】:

标签: c# xml linq-to-xml stringbuilder xmlwriter


【解决方案1】:

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

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

我在LinqPad 中尝试过这个,它似乎做对了。

【讨论】:

    【解决方案2】:

    您可以尝试使用 WriteCData

    伪:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 2021-12-29
        • 2014-10-07
        相关资源
        最近更新 更多