Cómo sangrar después de salto de línea en el valor del elemento XML cuando se utiliza un XmlTextWriter?

StackOverflow https://stackoverflow.com/questions/874147

  •  22-08-2019
  •  | 
  •  

Pregunta

Estoy tratando de guión después de un salto de línea cuando se utiliza un XmlTextWriter

Así que, esencialmente quiero este

<?xml version="1.0" encoding="utf-16"?>
<element>
  a
</element>

pero utilizando el código de abajo me sale este

<?xml version="1.0" encoding="utf-16"?>
<element>
a
</element>

Aquí está mi instrumento de prueba actual

[Test]
public void XmlIndentingTest()
{
    var provider = new StringBuilder();
    var settings = new XmlWriterSettings
                       {
                           Indent = true,
                           IndentChars = "  ",
                       };
    using (var writer = new StringWriter(provider))
    {
        using (var xmlWriter = XmlTextWriter.Create(writer, settings))
        {
            xmlWriter.WriteStartElement("element");
            xmlWriter.WriteString("\r\na\r\n");
            xmlWriter.WriteEndElement();
        }
    }
    Debug.WriteLine(provider.ToString());
}
¿Fue útil?

Solución

La sangría especifica en el escritor es para el sangrado entre los elementos de los que no hay espacio en blanco significativo. El espacio en blanco que desea crear es siginficant, ya que forma parte del valor de texto entre las etiquetas de apertura y cierre.

Si el escritor hiciera eso a XML normales estaría modificando el contenido de texto de manera inaceptable. Que tiene que hacer esto por sí mismo.

Otros consejos

Su código doesexactly lo que te diga que hacer, me temo.

xmlWriter.WriteStartElement("element"); //<element>
xmlWriter.WriteString("\r\na\r\n");     //newline, directly followed by 'a'
xmlWriter.WriteEndElement();            //</element>

Si desea una muesca, que tendrá que escribir esto en su código, como

xmlWriter.WriteString("\r\n\ta\r\n");    

El problema con este enfoque es que si su <element> ya está marcada, las que se hace un lío la sangría -. Su 'un' todavía sería exactamente una sangría pestaña

Así que usted puede calcular la huella de alguna manera a sí mismo, y escribir el número apropiado de fichas, o ir con todo el elemento en una línea

<element>a</element>

Esto es definitivamente más clara, pero puede parecer extraño cuando 'a' se convierte en un texto muy largo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top