使用C#取消注释XML文件中的注释节点
问题描述:
我有一个XML文件,其中有一个注释掉的节点。我使用语法创建了此节点 -使用C#取消注释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);
}
我该如何得到这个特殊的评论节点。 (可能有几个注释节点)。有没有办法为此使用XQuery? – Ananth 2010-09-09 14:13:43
@Anath,我猜最好的选择是使用XPath查询XmlDocument.SelectNodes()来获取注释,然后使用string.IndexOf或者如果模式更复杂,检查您感兴趣的模式的字符串可以使用RegEx。 – 2010-09-09 14:18:13
@Anath,我在上面添加了一个示例来解决您的评论。这有帮助吗? – 2010-09-10 08:19:44