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