2009-12-29 76 views
1

我使用HtmlAgilityPack解析了要轉換爲HTML的XML文件。一些節點將被轉換爲HTML等效。其他不必要的我需要刪除,同時保持內容。我試圖把它轉換成一個沒有運氣的#text節點。這裏是我的代碼:將節點類型更改爲#text,同時使用HtmlAgilityPack保留內節點

private HtmlNode ConvertElementsPerDatabase(HtmlNode parentNode, bool transformChildNodes) 
{ 
    var listTagsToReplace = XmlTagMapping.SelectAll(string.Empty); // Custom Dataobject 
    var node = parentNode; 
    if (node != null) 
    { 
     var bNodeFound = false; 
     if (node.Name.Equals("xref")) 
     { 
      bNodeFound = true; 
      node = NodeXref(node); 
     } 
     if (node.Name.Equals("graphic")) 
     { 
      bNodeFound = true; 
      node = NodeGraphic(node); 
     } 
     if (node.Name.Equals("ext-link")) 
     { 
      bNodeFound = true; 
      node = NodeExtLink(node); 
     } 

     foreach (var infoTagToReplace in listTagsToReplace) 
     { 
      if (node.Name.Equals(infoTagToReplace.XmlTag)) 
      { 
       bNodeFound = true; 
       node.Name = infoTagToReplace.HtmlTag; 
       if (!string.IsNullOrEmpty(infoTagToReplace.CssClass)) 
        node.Attributes.Add("class", infoTagToReplace.CssClass); 

       if (node.HasAttributes) 
       { 
        var listTagAttributeToReplace = XmlTagAttributeMapping.SelectAll_TagId(infoTagToReplace.Id); // Custom Dataobject 
        for (int i = 0; i < node.Attributes.Count; i++) 
        { 
         var bDeleteAttribute = true; 
         foreach (var infoTagAttributeToReplace in listTagAttributeToReplace) 
         { 
          if (infoTagAttributeToReplace.XmlName.Equals(node.Attributes[i].Name)) 
          { 
           node.Attributes[i].Name = infoTagAttributeToReplace.HtmlName; 
           bDeleteAttribute = false; 
          } 
         } 
         if (bDeleteAttribute) 
          node.Attributes.Remove(node.Attributes[i].Name); 
        } 
       } 
      } 
     } 
     if (transformChildNodes) 
      for (int i = 0; i < parentNode.ChildNodes.Count; i++) 
       parentNode.ChildNodes[i] = ConvertElementsPerDatabase(parentNode.ChildNodes[i], true); 

     if (!bNodeFound) 
     { 
      // Replace with #text 
     } 
    } 
    return parentNode; 
} 

在我需要做的節點更換結束(在這裏你看到「與#text替換」評論)如果沒有找到該節點。我一整天都在扯掉我的頭髮(剩下的東西),這可能是愚蠢的。我無法獲得編譯的幫助,也沒有在線版本。幫助Stackoverflow!你是我唯一的希望。 ;-)

+0

我的回答顯然是錯誤的 - 當我無法同時看到開始和結束時,難以跟蹤所有的示波器塊:無論如何,兩個新問題:1)您是否真的應該給'parentNode.ChildNodes [i]'遞歸的值,還是應該給它一些其他變量,例如'node'? 2)爲什麼你返回'parentNode'而不是'node'? – 2009-12-29 23:20:03

回答

0

我想你可能只是這樣做:

return new HtmlNode(HtmlNodeType.Text, parentNode.OwnerDocument, 0); 

這當然增加了節點到文件的頭部,但我假設你有某種形式的代碼的地方處理情況在文檔中應該添加節點。

關於文檔註釋,Html Agility Pack documentation的當前(截止撰寫本文)下載的CHM文件不需要編譯即可查看。

+0

是啊,我明白了......不幸的是,所有的頁面都會顯示「找不到文件」......雖然有索引... – craigmoliver 2009-12-30 15:19:13

相關問題