Como recuar após a nova linha no valor do elemento XML ao usar um XMLTextWriter?

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

  •  22-08-2019
  •  | 
  •  

Pergunta

Estou tentando recuar depois de uma nova linha ao usar um XMLTextWriter

Então, essencialmente eu quero isso

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

Mas usando o código abaixo, eu entendo isso

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

Aqui está o meu chicote de teste atual

[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());
}
Foi útil?

Solução

O recuo especificado no escritor é para o indentação entre elementos onde não há espaço de branco significativo. O espaço em branco que você deseja criar é siginficant, porque faz parte do valor do texto entre as tags de abertura e fechamento.

Se o escritor fizesse isso no XML normal, ele estaria modificando o conteúdo do texto de maneira inaceitável. Você precisa fazer isso sozinho.

Outras dicas

Seu código não é inserido o que você diz para fazer, receio.

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

Se você quiser um recuo, terá que escrever isso em seu código, como

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

O problema com essa abordagem é que se o seu <element> Já está recuado, ele vai atrapalhar o recuo - seu 'A' ainda seria recuado exatamente uma guia.

Assim, você pode calcular o recuo de alguma forma e escrever o número apropriado de guias, ou você vai com todo o elemento em uma linha

<element>a</element>

Isso é definitivamente mais claro, mas pode parecer estranho quando 'A' se torna um texto muito longo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top