У меня есть файл конфигурации XML, и со всеми включенными в него процессами длина моего XML-файла превышает 1000 строк. Моя команда жалуется, что размер файла затрудняет обновление. Есть ли у кого-нибудь идеи о том, как сократить/упростить XML-документ?
Вот как выглядит формат xml:
<?xml version = "1.0" encoding = "UTF-8"?>
<BuildVerficationRoot>
<Configuration>
<Value Name = "emailFrom">[email protected]</Value>
<Value Name = "admin_list">[email protected]</Value>
<Value Name = "distribution_list">[email protected]</Value>
<Value Name = "SmtpMailClient">info.co.net</Value>
<Value Name = "verboseLogFileName">VerifyBuildVerbose.txt</Value>
<Value Name = "statsLogProcessVerFileName">Stats.txt</Value>
<Value Name = "project">proj</Value>
<Value Name = "version">1.0</Value>
<Value Name = "publishHeader">PublishDestination</Value>
</Configuration>
<BuildVerification>
<codeFreezeTime>19:00</codeFreezeTime>
<build>
<BuildMachine>mach-1</BuildMachine>
<Process>
<ProcessName>Version</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
<endTimeHeader>EndTime</endTimeHeader>
<failureColumns>ErrorDescription</failureColumns>
<Conditions>
<Condition
name='VersionFile' value = "\view\dev\Retail\filename.cs">
</Condition>
</Conditions>
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Process>
<!--there are several build machines and each build machine has several processes under it, so this is what is many many lines -->
</build>
</BuildVerification>
</BuildVerficationRoot>
Моя программа работает следующим образом: она читает XML-файл с помощью LINQ и считывает файлы журнала в таблицу данных, а я перебираю списки, хранящие LINQ, и сравниваю их с данными в файлах журналов, чтобы определить, были ли сборки успешными.
Ищем упрощенный XML, в котором меньше строк.
Дополнительную информацию об этом проекте, например о классах, используемых для хранения информации, указанной в LINQ, см. в разделе классы для LINQ.
Область XML, которую необходимо сократить, находится в теге, который очень длинный. Он работает отлично, просто команда считает, что XML слишком длинный и громоздкий. Мы не хотим использовать формат для хранения данных, отличный от XML, мы просто хотим сделать XML более компактным.
Я видел минификатор xml, но кажется, что он просто удаляет разрывы строк, поэтому все это ужасно отформатировано.
Вы можете сэкономить много строк, используя атрибуты вместо узлов. Таким образом, вы выравниваете структуру. Имейте в виду, что вам придется изменить код, читающий XML. Возможно, вы могли бы использовать сериализатор XML для чтения XML. https://learn.microsoft.com/en-us/dotnet/standard/serialization/examples-of-xml-serialization
<?xml version = "1.0" encoding = "UTF-8"?>
<BuildVerification>
<Config emailFrom = "[email protected]"
adminList = "[email protected]"
distributionList = "[email protected]"
SmtpMailClient = "info.co.net"
verboseLogFileName = "VerifyBuildVerbose.txt"
statsLogProcessVerFileName = "Stats.txt"
project = "proj"
version = "1.0"
publishHeader = "PublishDestination" />
<CodeFreeze time = "19:00" />
<Build machine = "mach-1">
<Process name = "Version"
startTimeHeader = "StartTime"
endTimeHeader = "EndTime"
failureColumns = "ErrorDescription">
<Condition name = "VersionFile" value = "\view\dev\Retail\filename.cs" />
<SuccessCriteria field = "Status" comparison = "equal" value = "Success" />
</Process>
</Build>
</BuildVerification>
Кроме того, вы можете удалить значения по умолчанию. Например, если failureColumns
часто является ErrorDescription
, вы можете установить это в своем коде по умолчанию, если оно не объявлено в xml. Это может работать со всеми значениями в вашем XML.
Это может быть выполнимо. Спасибо, Себастьян. Я мог бы удалить errorColumns, где таблица журнала не имеет индикации сбоя, но имена столбцов сильно различаются, а иногда и имеют несколько имен столбцов.
причина, по которой у меня были условия, заключалась в том, что у меня есть несколько условий, и пара из них у меня есть. То же самое и с критериями успеха, которых у меня может быть кратно.
Чтобы определить, как удалить/изменить что-то, кроме пробелов, потребуется знать, какие теги/данные могут быть изменены или удалены, но никто здесь не в состоянии решить это.