我有一个
XML文件,其中有一个被注释掉的节点.我使用语法创建了这个节点 –
relTableCommentedNode = xDoc.CreateNode(XmlNodeType.Comment,“RELTABLECOMMENTED”,“np”);
取消注释此节点的最佳方法是什么?我可以根据用于创建节点的名称(RELTABLECOMMENTED)来识别此节点吗?
这是注释节点
<!--<reltable toc="no" class="- map/reltable "> <relheader class="- map/relheader "> <relcolspec type="concept" class="- map/relcolspec "> </relheader> <relrow class="- map/relrow "> <relcell class="- map/relcell "> <topicref href="concepts\about_cannedgoods.dita" copy-to="concepts\about_cannedgoods.dita" class="- map/topicref " xmlns:dctm="http://www.documentum.com"> </topicref> </relcell> </relrow> </reltable> -->
解决方法
据我所知,使用XmlDocument,没有直接的方法来做到这一点.您需要执行以下操作
>获取注释节点的值
>使用步骤1中的值创建一个新的XmlNode
>删除评论节点
>将步骤2中的新节点添加到DOM树
下面是一个示例,其中包含XML的略微简化版本,并在有关查找正确注释节点的注释中解决您的问题.请注意,我查询所有注释节点,显然您可以更具体,并查询您感兴趣的文档部分.
string xml = @" <root> <!--<reltable toc='no' class='- map/reltable '> <relheader class='- map/relheader '> <relcolspec type='concept' class='- map/relcolspec '/> </relheader> </reltable> --> <!--<reltable toc='no' class='- map '> <relheader class='- map/relheader '> <relcolspec type='concept' class='- map/relcolspec '/> </relheader> </reltable> --> </root>"; XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(xml); XmlNodeList commentedNodes = xdoc.SelectNodes("//comment()"); var commentNode = (from comment in commentedNodes.Cast<XmlNode>() where comment.Value.Contains("class='- map '") select comment).FirstOrDefault(); if (commentNode != null) { XmlReader nodeReader = XmlReader.Create(new StringReader(commentNode.Value)); XmlNode newNode = xdoc.ReadNode(nodeReader); commentNode.ParentNode.ReplaceChild(newNode,commentNode); }