Добавление атрибута в элементDom

1. Ayria 15.07.20 09:40 Сейчас в теме
Добрый день
заполняю шаблон word посредством его разархивирования и работой с документом document.xml
в некоторые тэги w:t необходимо ставить особый атрибут xml:space, что бы сохранять расположение пробелов
при попытке добавить/Создать атрибут посредством
Атрибут1 = ДокументДом.СоздатьАтрибут("http://www.w3.org/XML/1998/namespace","xml:space");

Система создает атрибут, но у него становится не это имя, ПространствоИменURI пропадает, ну и соответственно нет префикса.

Может кто то сталкивался с этим, как установить этот атрибут, что бы система понимала, что он особый.
p.s. я да же пыталась его находить и клонировать, при клонировании убиралось ПространствоИменURI и имя атрибута становилось другим.
а если устанавливать атрибут
ЭлСпискаWT.УстановитьАтрибут("xml:space","preserve");

то начинает ругаться при сохранении на неправильность имен XML
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 15.07.20 09:58 Сейчас в теме
(1)Примерно так:
ЭлСпискаWT.УстановитьАтрибут("http://www.w3.org/XML/1998/namespace","preserve",<ЗначениеАтрибута>);
3. Ayria 15.07.20 13:09 Сейчас в теме
(2)
так не сработает
данные нужного атрибута:
Атрибут АтрибутDOM АтрибутDOM
URIПространстваИмен "http://www.w3.org/XML/1998/namespace" Строка
Атрибуты Неопределено
БазовыйURI "sfile://C:/Users/1C_System/AppData/Local/Temp/cc4b6bf1-644e-46a1-93c6-299297946868/word/document.xml" Строка
ДокументВладелец ДокументDOM ДокументDOM
ДочерниеУзлы СписокУзловDOM СписокУзловDOM
Значение "preserve" Строка
ЗначениеУзла "preserve" Строка
Имя "xml:space" Строка
ИмяУзла "xml:space" Строка
ЛокальноеИмя "space" Строка
ПервыйДочерний ТекстDOM ТекстDOM
ПоследнийДочерний ТекстDOM ТекстDOM
ПредыдущийСоседний Неопределено
Префикс "xml" Строка
РодительскийУзел Неопределено
СледующийСоседний Неопределено
ТекстовоеСодержимое "preserve" Строка
ТипУзла Атрибут ТипУзлаDOM
Указан Истина Булево
ЭлементВладелец ЭлементDOM ЭлементDOM
ЯвляетсяИдентификатором Ложь Булево




и то что потом получается, если создавать самой
Свойство Значение Тип
ЭлСпискаWT.Атрибуты[0] АтрибутDOM АтрибутDOM
URIПространстваИмен "" Строка
Атрибуты Неопределено
БазовыйURI "sfile://C:/Users/1C_System/AppData/Local/Temp/cc4b6bf1-644e-46a1-93c6-299297946868/word/document.xml" Строка
ДокументВладелец ДокументDOM ДокументDOM
ДочерниеУзлы СписокУзловDOM СписокУзловDOM
Значение "preserve" Строка
ЗначениеУзла "preserve" Строка
Имя "space" Строка
ИмяУзла "space" Строка
ЛокальноеИмя "space" Строка
ПервыйДочерний ТекстDOM ТекстDOM
ПоследнийДочерний ТекстDOM ТекстDOM
ПредыдущийСоседний Неопределено
Префикс "" Строка
РодительскийУзел Неопределено
СледующийСоседний Неопределено
ТекстовоеСодержимое "preserve" Строка
ТипУзла Атрибут ТипУзлаDOM
Указан Истина Булево
ЭлементВладелец ЭлементDOM ЭлементDOM
ЯвляетсяИдентификатором Ложь Булево
4. Ayria 15.07.20 13:12 Сейчас в теме
Или кто работал с word через документDOM как сделать так, что бы помещая фрагменты текста в разные тэги w:r система запоминала пробелы, а не обрезала их справа и слева
5. FReIM 8 04.07.23 14:41 Сейчас в теме
(4)
Итак спустя три года.
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);

Построитель = Новый ПостроительDOM;
ДокументDOM = Построитель.Прочитать(ЧтениеXML);
ЧтениеXML.Закрыть();
		
РазыменовательПространствИменDOM = Новый РазыменовательПространствИменDOM(ДокументDOM);

Для Каждого Параметр Из ДанныеЗаполнения Цикл
ВыражениеXPath = ДокументDOM.СоздатьВыражениеXPath("//w:t[contains(text(),'" +Параметр.Ключ+ "')]", РазыменовательПространствИменDOM);
РезультатXPath = ВыражениеXPath.Вычислить(ДокументDOM);
		
Узел = РезультатXPath.ПолучитьСледующий();
Пока Узел <> Неопределено Цикл

        Если Узел.ПОлучитьАтрибут("http://www.w3.org/XML/1998/namespace","space")<>"preserve"
		//добавлено на случай если тексту внутри которого находится более одного параметры мы уже становили атрибут
		и Узел.ПОлучитьАтрибут("http://www.w3.org/XML/1998/namespace","xml_space")<>"preserve"тогда
		Узел.УстановитьАтрибут("http://www.w3.org/XML/1998/namespace", "xml_space", "preserve");
	КонецЕсли;
КонецЦикла;
КонецЦикла;
		
ЗаписьDOM = Новый ЗаписьDOM; 
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла); 
ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
ЗаписьXML.Закрыть();

ЧтениеТекста=Новый ЧтениеТекста(ИмяФайла,КодировкаТекста.UTF8);
Строка=ЧтениеТекста.Прочитать();
Строка=СтрЗаменить(Строка,"xml_space","xml:space");
ЧтениеТекста.Закрыть();
		
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла,КодировкаТекста.UTF8);
ЗаписьТекста.Записать( Строка);
ЗаписьТекста.Закрыть();

Показать
Оставьте свое сообщение

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