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
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;
}
}