6

我有一个 XML 文件,其中有一个被注释掉的节点。我使用以下语法创建了这个节点:

relTableCommentedNode = xDoc.CreateNode(XmlNodeType.Comment, "RELTABLECOMMENTED", "np");

取消注释此节点的最佳方法是什么?我可以根据我用来创建节点的名称 ( RELTABLECOMMENTED) 来识别这个节点吗?

这是注释节点:

<code>
<pre> 
<!--<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> -->
</pre>
</code>
4

1 回答 1

9

据我所知,使用 XmlDocument 没有直接的方法可以做到这一点。您将需要执行以下操作

  1. 获取评论节点的值
  2. 使用步骤 1 中的值创建一个新的 XmlNode
  3. 删除评论节点
  4. 将步骤 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);
  }
于 2010-09-09T13:41:54.033 回答