Geração dinamicamente RDLC - O que me impede de usar um StringBuilder para construir o XML
-
22-08-2019 - |
Pergunta
Estou construindo um relatório local. Devido a algumas limitações da propriedade oculta, preciso gerar dinamicamente o relatório.
Eu encontrei alguma documentação aqui.
O controle do relatório precisa de um fluxo.
Eu realmente não gosto do método usado na documentação. E construir um XMLDocument não é muito legível IMO.
Há algo que me impede de fazer assim
classe programa {estático void main (string [] args) {generateReport (); }
static void GenerateReport(){
StringBuilder reportXml = new StringBuilder();
reportXml.Append("<Report>");
reportXml.Append("<PageHeight>8.5in</PageHeight>");
reportXml.Append("</Report>");
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(reportXml.ToString());
xmlDocument.Save(@"C:\test.xml");
xmlDocument.Save(Console.Out);
Console.ReadLine();
}
}
Solução
Simples: se você usar esse método, operações especiais no processador detectam que a classe errada WS usou para gerar essa string, momento em que a polícia da correção é chamada.
Sério, não há nada que o impeça de fazê -lo exatamente assim; De fato, sob as capas, você pode apostar que há algum código no gerador XML mais complicado que faz algo assim. Quando você se aproxima, o XML é apenas uma corda e, desde que seja bem formada, essa string será a mesma, não importa como você a construa.
A vantagem de outras classes é que elas são mais simples e mais flexíveis quando você deseja criar XML mais complicado.
Existem quase infinitamente muitas classes que podem gerar XML ou XHTML. Procure um que tenha uma "interface fluente". Em um C ++-como a linguagem, pode parecer:
XMLOutStream foo("filename.xml);
foo.group("Top","attr=val")
.group("Next")
.line("Another", "attr=val") ;
para gerar
<Top>
<Next attr="val">
<Another attr="val" />
</Next>
</Top>
Eu estava procurando algo semelhante para HTML em essa questão.