studio programacion móviles libros libro desarrollo desarrollar curso aprende aplicaciones xml ms-word docx

xml - móviles - manual de programacion android pdf



XML: agregar nueva línea (3)

Tengo MS Word Doc guardado como .docx . Quiero insertar una nueva línea en mi texto editando el archivo XML de docx. Ya he intentado 
 , 
 , 
 , 	 , y siempre me da solo espacio, no una nueva línea.

Que hace:

(Código XML) <w:t>hel&#xA;lo</w:t>

Cuando abro el archivo .docx , entonces cambia a:

No Hel lo hecho porque quería ser Hel en una línea y estar en segunda línea.


Use la etiqueta <w:br/> .

Lo encontré creando un documento de Word, guardándolo como XML (a través de Guardar como), agregando un salto de línea forzado con Shift Enter, y comprobé el cambio. La diferencia esencial parece ser solo la etiqueta w:br , que aparentemente refleja la etiqueta HTML br .


En caso de que ayude a alguien, el siguiente bit del código c # creará la estructura XML multilínea

//Sets the text for a Word XML <w:t> node //If the text is multi-line, it replaces the single <w:t> 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("/n/r".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("<w:t xmlns:w=/"http://schemas.microsoft.com/office/word/2003/wordml/">"); xmlBuilder.Append(lines[count]); xmlBuilder.Append("</w:t>"); //Not the last line? add line break if (count != lines.Length - 1) { xmlBuilder.Append("<w:br xmlns:w=/"http://schemas.microsoft.com/office/word/2003/wordml/" />"); } } //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 necesarios y los retornos de carro, y también se ocupará del prefijo.


Basado en la respuesta de @ Lenny anterior, esto es lo que funciona usando Obj-C en mi situación con MS Word 2011 en una Mac:

- (NSString *)setWordXMLText:(NSString *)str { NSString *newStr = @""; // split the string into individual lines NSArray *lines = [str componentsSeparatedByString: @"/n"]; if (lines.count > 1) { // add XML nodes for each line so that Word XML will accept the new lines for (int count = 0; count < lines.count; count++) { newStr = [newStr stringByAppendingFormat:@"<w:t>%@</w:t>", lines[count]]; // Not the last line? add a line break if (count != lines.count - 1) { newStr = [newStr stringByAppendingString:@"<w:br/>"]; } } return newStr; } else { return str; } }