それで、私は巨大なXMLファイルを持っており、すべてのCDATAセクションを削除し、CDATAノードの内容を安全なhtmlエンコードされたテキストノードに置き換えたいと思います。
もちろん、正規表現を使用してCDATAを削除するだけで、解析が中断されます。CDATAをエンコードされたテキストと交換するためのLINQ、XmlDocument、またはXmlTextWriterの手法はありますか?
私はまだ最終的なエンコーディングにはあまり関心がありません。セクションを自分の選択したエンコーディングに置き換える方法だけです。
元の例
---
<COLLECTION type="presentation" autoplay="false">
<TITLE><![CDATA[Rights & Responsibilities]]></TITLE>
<ITEM id="2802725d-dbac-e011-bcd6-005056af18ff" presenterGender="male">
<TITLE><![CDATA[Watch the demo]]></TITLE>
<LINK><![CDATA[_assets/2302725d-dbac-e011-bcd6-005056af18ff/presentation/presentation-00000000.mp4]]></LINK>
</ITEM>
</COLLECTION>
---
なるだろう
<COLLECTION type="presentation" autoplay="false">
<TITLE>Rights & Responsibilities</TITLE>
<ITEM id="2802725d-dbac-e011-bcd6-005056af18ff" presenterGender="male">
<TITLE>Watch the demo</TITLE>
<LINK>_assets/2302725d-dbac-e011-bcd6-005056af18ff/presentation/presentation-00000000.mp4</LINK>
</ITEM>
</COLLECTION>
最終的な目標はJSONに移行することだと思います。私はこれを試しました
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath( @"~/somefile.xml"));
string jsonText = JsonConvert.SerializeXmlNode(doc);
しかし、私は醜いノード、つまり「#cdata-section」キーになってしまいます。これを受け入れるためにフロントエンドを再開発するには、WAAAAYに何時間もかかります。
"COLLECTION":[{"@type":"whitepaper","TITLE":{"#cdata-section":"SUPPORTING DOCUMENTS"}},{"@type":"presentation","@autoplay":"false","TITLE":{"#cdata-section":"Demo Presentation"},"ITEM":{"@id":"2802725d-dbac-e011-bcd6-005056af18ff","@presenterGender":"male","TITLE":{"#cdata-section":"Watch the demo"},"LINK":{"#cdata-section":"_assets/2302725d-dbac-e011-bcd6-005056af18ff/presentation/presentation-00000000.mp4"}