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 に答える