Как сформировать XML из объекта XDTO без указания пространства имен

1. cushe 5 13.08.24 17:45 Сейчас в теме
Как сформировать XML из объекта XDTO без указания пространства имен
Объект XDTO формируется из 5 пакетов, каждый из которых содержит уровень вложенности показателей
При формировании из него XML следующим кодом

ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку("windows-1251");
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектВыгрузки, "Document", СлужебныйСерверПовтИсп.ИмяПакетаКорневогоЭлемента());
	СтрокаXML = ЗаписьXML.Закрыть();


получаем такой тест

<?xml version="1.0" encoding="windows-1251"?>
<Document xmlns="http://aaaa.mos.ru/Main" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="" schemaVersion="2.1" inn="1122334455" ogrn="1234567890123" sourceID="ZZTOP" regNumberDoc="0" dateDoc="2024-07-26" subjectsCount="0" groupBlocksCount="0">
	<Source>
		<FL_46_UL_36_OrgSource xmlns:d3p1="http://aaaa.mos.ru/blocks">
			<d3p1:fullName>Общество с ограниченной ответственностью "РЛ"</d3p1:fullName>
			<d3p1:shortName>ООО "РЛ"</d3p1:shortName>
		</FL_46_UL_36_OrgSource>
	</Source>
	<Data>
		<Subject_UL>
			<Title>
				<UL_1_Name xmlns:d5p1="http://aaaa.mos.ru/blocks">
					<d5p1:fullName>ооо лпп</d5p1:fullName>
					<d5p1:shortName>ЛП</d5p1:shortName>
					<d5p1:otherName>ООО ЛП</d5p1:otherName>
					<d5p1:change_0 xsi:type="xs:boolean">true</d5p1:change_0>
					<d5p1:prevFull>Общество с ограниченной ответственностью "ЛП"</d5p1:prevFull>
				</UL_1_Name>
			</Title>
			<Events>
				<UL_Event_1_4_1 xmlns:d5p1="http://aaaa.mos.ru/events">
					<d5p1:UL_10_DealUid xmlns:d6p1="http://aaaa.mos.ru/blocks">
						<d6p1:uid>2127b938-adbd-1afe-aacc-18ee25845d2c-9</d6p1:uid>
					</d5p1:UL_10_DealUid>
					<d5p1:UL_11_Deal xmlns:d6p1="http://aaaa.mos.ru/blocks">
						<d6p1:role>4</d6p1:role>
						<d6p1:code>2</d6p1:code>
						<d6p1:cardExist_0 xsi:type="xs:boolean">false</d6p1:cardExist_0>
						<d6p1:novationExist_0 xsi:type="xs:boolean">false</d6p1:novationExist_0>
						<d6p1:monetarySourceExist_0 xsi:type="xs:boolean">false</d6p1:monetarySourceExist_0>
						<d6p1:monetarySubjectExist_0 xsi:type="xs:boolean">true</d6p1:monetarySubjectExist_0>
						<d6p1:endDate>2025-02-01</d6p1:endDate>
						<d6p1:partialExist_0 xsi:type="xs:boolean">false</d6p1:partialExist_0>
						<d6p1:floatRateExist_0 xsi:type="xs:boolean">false</d6p1:floatRateExist_0>
						<d6p1:startDate>2024-07-25</d6p1:startDate>
					</d5p1:UL_11_Deal>
					<d5p1:UL_12_1_AmountInfo xmlns:d6p1="http://aaaa.mos.ru/blocks">
						<d6p1:securitySum>7932000</d6p1:securitySum>
						<d6p1:securityCurrency>RUB</d6p1:securityCurrency>
						<d6p1:calcDate>2024-07-26</d6p1:calcDate>
					</d5p1:UL_12_1_AmountInfo>
					<d5p1:UL_17_18_19_20_Group xmlns:d6p1="http://aaaa.mos.ru/blocks">
						<d6p1:UL_17_Debt>
							<d6p1:exist_1 xsi:type="xs:decimal">1</d6p1:exist_1>
							<d6p1:debtSum>2940000</d6p1:debtSum>
						</d6p1:UL_17_Debt>
						<d6p1:UL_18_DebtDue>
							<d6p1:debtDueSum>2940000</d6p1:debtDueSum>
							<d6p1:debtDueMainSum>2940000</d6p1:debtDueMainSum>
							<d6p1:debtDueStartDate>2024-07-26</d6p1:debtDueStartDate>
						</d6p1:UL_18_DebtDue>
					</d5p1:UL_17_18_19_20_Group>
				</UL_Event_1_4_1>
			</Events>
		</Subject_UL>
	</Data>
</Document>
Показать


Как отключить при формировании XML отображение пространства имен, что бы в текста не было префиксов d3p1:, d5p1:, d6p1:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. truba 14.08.24 15:18 Сейчас в теме
Я вырезал атрибуты и теги из уже сформированного файла когда надо было с фнс взаимодействовать. Долго искал способ в XDTO это побороть, но проще обернуть формирование исходной xml-строки во врапер вырезания первого встречного xmlns. В БСП работе с html такой подход встречается.

Теоретически можно результирующий xml отдать в DOM и там уже вырезать все нужные атрибуты.

Ну или старой доброй парой чтения и записи xml пробежаться и атрибуты xmlns исключить.

Но это все вручную. И надо анализировать неймспейсы самостоятельно, насколько я понимаю у вас набор может быть плавающим.

Если хочется извращений для извращенных можно xdto пакет в xsd схему выгрузить, исправить файл схемы на предмет namespace и загрузить в фабрику снова, там уже будет ваш namespace по вашему формату, который дальше враппером грохнуть.
3. truba 14.08.24 15:24 Сейчас в теме
Но еще вопрос: есть ли гарантии что именования переменных не пересекаются в этих пакетах?
4. soft_wind 14.08.24 15:40 Сейчас в теме
попробуйте такой код
	//получаем из Объекта или набора записей - строку !
	//прОбъект 		= лкОбъект.ПолучитьОбъект();
	лкОбъектXDTO	= СериализаторXDTO.ЗаписатьXDTO(прОбъект);
	лкЗаписьXML		= Новый ЗаписьXML;
	лкЗаписьXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(лкЗаписьXML,лкОбъектXDTO);
	лкСтрокаИсх		= лкЗаписьXML.Закрыть();
	
Показать
5. cushe 5 15.08.24 09:07 Сейчас в теме
попробуйте такой код

У меня на выходе уже готовый ОбъектXDTO для выгрузки, так что этот метод не подойдет
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот