Динамическое создание RDLC. Что мешает мне использовать StringBuilder для создания XML
-
22-08-2019 - |
Вопрос
Я создаю локальный отчет.Из-за некоторых ограничений свойства Hidden мне необходимо динамически генерировать отчет.
Я нашел некоторую документацию здесь.
Элементу управления ReportViewer нужен поток.
Мне не очень нравится метод, используемый в документации.И по моему мнению, создание XmlDocument не очень читабельно.
Что-то мешает мне сделать это вот так?
Class Program {static 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();
}
}
Решение
Простой:Если вы используете этот метод, специальные операции процессора обнаруживают, что для генерации этой строки использовался неправильный класс, и в этот момент вызывается полиция корректности.
Серьезно, ничто не мешает вам сделать это именно так;на самом деле, вы можете быть уверены, что в более сложном генераторе XML скрывается некоторый код, который делает что-то очень похожее.Если разобраться, XML — это просто строка, и пока она правильно сформирована, эта строка будет одинаковой, независимо от того, как вы ее создадите.
Преимущество других классов в том, что они проще и гибче, если вам нужно создать более сложный XML.
Существует почти бесконечное множество классов, которые могут генерировать XML или XHTML.Ищите тот, у которого есть «свободный интерфейс».На C++-подобном языке это может выглядеть так:
XMLOutStream foo("filename.xml);
foo.group("Top","attr=val")
.group("Next")
.line("Another", "attr=val") ;
генерировать
<Top>
<Next attr="val">
<Another attr="val" />
</Next>
</Top>
Я искал что-то подобное для HTML в этот вопрос.