2010-01-09 12 views
5

Necesito guardar un XmlDocument en el archivo con la sangría adecuada (Formatting.Indented) pero algunos nodos con sus hijos tienen que estar en una línea (Formatting.None).¿Cómo guardar XmlDocument con varias configuraciones de sangría?

¿Cómo lograr eso ya que XmlTextWriter acepta la configuración de un documento completo?


Edición después de resposne @Ahmad Mageed:

no sabía que la configuración de XmlTextWriter puede ser modificado durante la escritura. Esas son buenas noticias.

En este momento estoy ahorrando xmlDocument (que ya está llena de nudos, para ser específico es .xaml página) de esta manera:

XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8); 
writer.Formatting = Formatting.Indented; 
xmlDocument.WriteTo(writer); 
writer.Flush(); 
writer.Close(); 

Permite hendidura en todos los nodos, por supuesto. Necesito deshabilitar la sangría al tratar con todos los nodos <Run>.

En su ejemplo, escribe en XmlTextWriter "manualmente". ¿Hay una manera fácil de rastrear a través de todos los nodos xmlDocument y escribirlos en XmlTextWriter para que pueda detectar los nodos <Run>? ¿O tengo que escribir algún tipo de método recursivo que vaya a cada hijo del nodo actual?

+0

@shg: Vi su respuesta. ¿Es LINQ to XML una opción? O estrictamente .NET 2.0? Por cierto, debe editar su pregunta y publicar ese código aquí en lugar de publicarlo como una respuesta para que todo esté en un lugar para que los demás lo vean, ya que es información adicional para su pregunta. Puede editar esto y luego eliminar la otra publicación. –

+0

@Ahmad Mageed: nunca antes había usado LINQ to XML, pero es una opción. Gracias por la pista. Lo echaré un vistazo más de cerca. BTW He hecho la edición que sugirió. Soy nuevo en publicar preguntas en stackoverflow, así que lo siento por el desastre. – shg

Respuesta

3

¿Qué quiere decir con "ya que XmlTextWriter acepta la configuración de un documento completo?" La configuración de XmlTextWriter se puede modificar, a diferencia de XmlWriter una vez establecido. Del mismo modo, ¿cómo estás usando XmlDocument? Publique un código para mostrar lo que ha intentado para que otros comprendan mejor el problema.

Si entendí correctamente, podría modificar el formato del XmlTextWriter para afectar los nodos que desea que aparezcan en una línea. Una vez que haya terminado, restablecería el formato para que se sangrara.

Por ejemplo, algo como esto:

XmlTextWriter writer = new XmlTextWriter(...); 
writer.Formatting = Formatting.Indented; 
writer.Indentation = 1; 
writer.IndentChar = '\t'; 

writer.WriteStartElement("root"); 

// people is some collection for the sake of an example 
for (int index = 0; index < people.Count; index++) 
{ 
    writer.WriteStartElement("Person"); 

    // some node condition to turn off formatting 
    if (index == 1 || index == 3) 
    { 
     writer.Formatting = Formatting.None; 
    } 

    // write out the node and its elements etc. 
    writer.WriteAttributeString("...", people[index].SomeProperty); 
    writer.WriteElementString("FirstName", people[index].FirstName); 

    writer.WriteEndElement(); 

    // reset formatting to indented 
    writer.Formatting = Formatting.Indented; 
} 

writer.WriteEndElement(); 
writer.Flush(); 
Cuestiones relacionadas