Reemplace un solo nodo con varios nodos usando HTML Agility Pack

.net c# html-agility-pack

Pregunta

Tengo algunas etiquetas de entrada que son marcadores de posición que estoy reemplazando con algún HTML. La mayoría de las veces, el HTML con el que los estoy reemplazando es solo una etiqueta, lo cual es bastante fácil:

HtmlNode node = HtmlNode.CreateNode(sReplacementString);
inputNode.ParentNode.ReplaceChild(node, inputNode);

Sin embargo, si quiero reemplazar inputNode con dos o más nodos, HtmlNode.CreateNode(sReplacementString) solo lee el primer nodo. ¿Hay una manera de hacer un reemplazo donde sReplacementString es múltiples etiquetas?

Respuesta aceptada

Que yo sepa, no hay una forma directa de hacerlo. HtmlNode.CreateNode método HtmlNode.CreateNode crea un solo nodo desde el fragmento de código HTML, si hay varios nodos allí, el primero se crea solo.

Como solución alternativa, puede crear un nodo temporal, crear sus nodos secundarios desde sReplacementString y luego agregar estos nodos secundarios justo después del nodo inputNode y, finalmente, eliminar el inputNode .

var temp = doc.CreateElement("temp");
temp.InnerHtml = sReplacementString;
var current = inputNode;
foreach (var child in temp.ChildNodes)
{
    inputNode.ParentNode.InsertAfter(child, current);
    current = child;
}
inputNode.Remove();



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué