J'utilise le HtmlAgilityPack pour analyser un fichier XML que je convertis en HTML. Certains des noeuds seront convertis en un équivalent HTML. Les autres qui sont inutiles que je dois enlever tout en maintenant le contenu. J'ai essayé de le convertir en un noeud #text sans aucune chance. Voici mon code:en changeant un type de noeud à #text tout en gardant les innernodes avec le 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;
}
A la fin, je dois faire le remplacement du noeud (où vous voyez le commentaire « Remplacer par #text ») si le nœud est introuvable. J'ai arraché mes cheveux (ce qui en reste) toute la journée et c'est probablement quelque chose de stupide. Je n'arrive pas à obtenir l'aide pour compiler et il n'y a pas de version en ligne. Aide Stackoverflow! Tu es mon seul espoir. ;-)
Ma réponse était évidemment fausse - c'était trop dur de garder une trace de tous les blocs de portée quand je ne pouvais pas voir le début et la fin en même temps ...: P De toute façon, deux nouvelles questions: 1) Devriez-vous vraiment donne 'parentNode.ChildNodes [i]' la valeur de la récursivité, ou devriez-vous la donner à une autre variable, par exemple 'node'? 2) Pourquoi renvoyez-vous 'parentNode' et non' node'? –