2010-09-09 157 views
4

我有一個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> --> 

回答

7

據我所知,使用XmlDocument的,有做這個沒有直接的方法。您將需要做類似下面的

  1. 獲取註釋節點的值
  2. 創建與步驟1
  3. 值新的XMLNode刪除註釋節點
  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); 
    } 
+0

我該如何得到這個特殊的評論節點。 (可能有幾個註釋節點)。有沒有辦法爲此使用XQuery? – Ananth 2010-09-09 14:13:43

+0

@Anath,我猜最好的選擇是使用XPath查詢XmlDocument.SelectNodes()來獲取註釋,然後使用string.IndexOf或者如果模式更復雜,檢查您感興趣的模式的字符串可以使用RegEx。 – 2010-09-09 14:18:13

+0

@Anath,我在上面添加了一個示例來解決您的評論。這有幫助嗎? – 2010-09-10 08:19:44