Saltar al contenido

XML: agregando una nueva línea

Estate atento porque en este enunciado hallarás la respuesta que buscas.

Utilizar el etiqueta.

Lo encontré al crear un documento de Word, guardarlo como XML (a través de Guardar como), agregar un salto de línea forzado con Shift Enter y verificar el cambio. La diferencia esencial parece ser precisamente la w:br etiqueta, aparentemente reflejando el HTML br etiqueta.

En caso de que ayude a alguien, el siguiente fragmento de código C# creará la estructura XML de varias líneas

//Sets the text for a Word XML  node
//If the text is multi-line, it replaces the single  node for multiple nodes
//Resulting in multiple Word XML lines
private static void SetWordXmlNodeText(XmlDocument xmlDocument, XmlNode node, string newText)


    //Is the text a single line or multiple lines?>
    if (newText.Contains(System.Environment.NewLine))
    
        //The new text is a multi-line string, split it to individual lines
        var lines = newText.Split("nr".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);


        //And add XML nodes for each line so that Word XML will accept the new lines
        var xmlBuilder = new StringBuilder();
        for (int count = 0; count < lines.Length; count++)
        
            //Ensure the "w" prefix is set correctly, otherwise docFrag.InnerXml will fail with exception
            xmlBuilder.Append("");
            xmlBuilder.Append(lines[count]);
            xmlBuilder.Append("");

            //Not the last line? add line break
            if (count != lines.Length - 1)
            
                xmlBuilder.Append("");
            
        

        //Create the XML fragment with the new multiline structure
        var docFrag = xmlDocument.CreateDocumentFragment();
        docFrag.InnerXml = xmlBuilder.ToString();
        node.ParentNode.AppendChild(docFrag);

        //Remove the single line child node that was originally holding the single line text, only required if there was a node there to start with
        node.ParentNode.RemoveChild(node);
    
    else
    
        //Text is not multi-line, let the existing node have the text
        node.InnerText = newText;
    

El código anterior creará los nodos secundarios y los retornos de carro necesarios, y se ocupará de la prefix también.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *