Я создаю небольшую утилиту экспорта для использования нашим персоналом, и одно из требований, которое я встраиваю, это xml.
Я использую следующий метод для генерации файла, и он работает.
public void ExportToXml(string fileOut, Settings exportSettings)
{
// Connects to the database, and makes the select command.
SqlConnection conn = ActiveConnection;
SqlDataAdapter adapter = new SqlDataAdapter(SqlString,conn);
adapter.SelectCommand.ExecuteNonQuery();
var dt = new DataTable(exportSettings.TableName.ToString());
DataSet ds = new DataSet(exportSettings.TableName);
ds.Tables.Add(dt );
adapter.Fill(ds,exportSettings.TableName);
XmlWriter w = new XmlTextWriter(ExportFolder + @"\" + Path.GetFileNameWithoutExtension(fileOut) + ".XML", Encoding.UTF8);
w.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
XmlDataDocument xd = new XmlDataDocument(ds);
XmlDataDocument xdNew = new XmlDataDocument();
XmlNode node = xdNew.ImportNode(xd.DocumentElement.LastChild, true);
node.WriteTo(w);
}
Это замечательно и дает приведенный ниже xml-файл
<?xml version="1.0" encoding="UTF-8"?>
-<ExportSettings>
<id>1</id>
<ExportName>Test Export</ExportName>
<CompnayName>Test Company</CompnayName>
<TableName>ExportSettings</TableName>
<Fields>ALL</Fields>
<SQLScript>Select * from ExportSettings</SQLScript>
<isActive>true</isActive>
<isDeleted>false</isDeleted>
<SystemType>1</SystemType>
</ExportSettings>
Однако, как вы видите, конечный пользователь может передать в оператор любую строку sql, что может означать присоединения и т. Д. К этому аккаунтудля этого.И еще одна проблема, которую я имею, состоит в том, как я должен учитывать поля, которые требуют обтекания CDATA вокруг них, то есть, если это было текстовое поле или varchar> 1000, я попытался использовать writexml, но обнаружил, что он довольно некорректен, есть ли лучшие методы для этого.
Я не хочу иметь для этого файл sep xslt, так как это динамический экспортер, который я создаю, поэтому любой совет или библиотека, которые лучше подходят для наборов данных в xml, будут хорошими.
Или я должен использовать совершенно другой подход, при котором мне не нужно беспокоиться о схеме файла, который будет создан на основе набора данных?Опять же я не хочу жестко кодировать что-либо из этого, если это вообще возможно.