.Net中如何将CDATA节点转为编码字符串并批量查找CDATA节点?
解决方案:处理XML中CDATA节点的转换与查找
查找所有CDATA节点的XPath表达式
要定位XML中任意层级的所有CDATA节点,可使用以下XPath表达式:
//node()[local-name()='#cdata-section']
该表达式会匹配所有类型为CDATA的节点,无论其处于XML结构的哪个层级。
.NET中转换CDATA为编码内容的方法
以下方法可将手动生成的XML字符串中的所有CDATA节点替换为自动编码的文本节点,使其格式与SQL Server存储后返回的XML一致:
using System.Xml; public static string NormalizeXmlCData(string rawXml) { var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(rawXml); // 查找所有CDATA节点 var cdataNodes = xmlDoc.SelectNodes("//node()[local-name()='#cdata-section']"); foreach (XmlCDataSection cdataNode in cdataNodes) { // 创建包含CDATA内容的文本节点,自动完成特殊字符编码 var textNode = xmlDoc.CreateTextNode(cdataNode.InnerText); // 替换CDATA节点为文本节点 cdataNode.ParentNode.ReplaceChild(textNode, cdataNode); } return xmlDoc.OuterXml; }
说明
- 该方法通过
XmlDocument解析原始XML,批量替换所有CDATA节点为普通文本节点,生成的XML会自动对特殊字符(如<、>、&)进行HTML实体编码,与SQL Server存储XML列后的输出格式完全匹配。 - 如果XML包含命名空间,需初始化
XmlNamespaceManager并传入SelectNodes方法,确保节点查找正常工作。
内容的提问来源于stack exchange,提问作者freefaller
相关产品推荐
相关产品推荐

