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 に答える