Имя: Пароль:
1C
1С v8
XML Удаление атрибута
0 zerat
 
02.08.16
08:43
Всем привет! Требуется удалить несколько атрибутов уже в выгруженном файле XML.

Написал через DOM, но удалить атрибуты как не пойму....

    ОбъектXML = Новый  ЧтениеXML;
    ОбъектXML.ОткрытьФайл(ФайлОбмена);
    
    ПостроительDOM = Новый ПостроительDOM;
    ДокументDOM    = ПостроительDOM.Прочитать(ОбъектXML);
    ОбъектXML.Закрыть();
    
    НужныйЭлемент  = ДокументDOM.ПолучитьЭлементыПоИмени("КоммерческаяИнформация");
    Если НужныйЭлемент.Количество()>0 Тогда
        
        НужныеАтрибуты = ДокументDOM.ПолучитьЭлементыПоИмени("КоммерческаяИнформация")[0].Атрибуты;
        
        Для сч=0 по НужныеАтрибуты.Количество()-1 Цикл
            Если ЗначениеЗаполнено(НужныеАтрибуты[сч].URIПространстваИмен) Тогда    
                НужныеАтрибуты[сч].Значение = "";
            КонецЕсли;
        КонецЦикла;
        
        ЗаписьXML = Новый ЗаписьXML;
        ЗаписьXML.ОткрытьФайл(ФайлОбмена);
        ЗаписьDOM = Новый ЗаписьDOM;
        ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
        ЗаписьXML.Закрыть();    
        
    КонецЕсли;
1 zerat
 
02.08.16
09:29
ап ап
2 igork1966
 
02.08.16
09:35
КоллекцияАтрибутовDOM (DOMAttributeMap)
Элементы коллекции:

АтрибутDOM
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются атрибуты DOM.
Возможно обращение к атрибуту DOM посредством оператора [...]. В качестве аргумента передается индекс (нумерация с 0).

Методы:

Количество (Count)
ПолучитьИменованныйЭлемент (GetNamedItem)
УдалитьИменованныйЭлемент (RemoveNamedItem)
УстановитьИменованныйЭлемент (SetNamedItem)
Элемент (Item)

(с) СП
3 igork1966
 
02.08.16
09:38
(2) Кстати, какая необходимость обходить коллекцию со счетчиком?
4 zerat
 
02.08.16
09:57
(2) что - то не находит он его по имени....
пишу так

НужныеАтрибуты.УдалитьИменованныйЭлемент("xmlns");
5 igork1966
 
02.08.16
10:07
(4) Гы.... это же пространство имен

http://forum.foxclub.ru/read.php?29,228574
6 zerat
 
02.08.16
10:58
http://prntscr.com/c0jry9
http://prntscr.com/c0js5y

почему то не находит..
7 igork1966
 
02.08.16
11:00
xmlns:__default__

образовалось потому что ты его "удалил"

xmlns не обычный атрибут, это пространство имен. Его не удалить.
8 igork1966
 
02.08.16
11:02
(7) + вот там приводится вариант костыля:

Создать XML по схеме XSD без пространства имен
9 zerat
 
02.08.16
11:06
(8) Текст = Новый ТекстовыйДокумент;

Это же капец....капец как долго будет если файл огромный, и пихать его в память....
10 igork1966
 
02.08.16
11:08
(9) Другой вариант, прочитать XML и создать новый без пространства имен будет не быстрее.
11 igork1966
 
02.08.16
11:11
(10) + или можно использовать ПреобразованиеXSL


ЗЫ. В любом случае ты его читать будешь...
12 zerat
 
02.08.16
11:12
(11) Спасибо, сейчас попробую костыли)))
13 Serginio1
 
02.08.16
14:17
ЗаписьXML = Новый ЗаписьXML;

   Пока ЧтениеXML.Прочитать() Цикл
// Проверй если не нужный узел то записывай полностью
       ЗаписьXML.ЗаписатьТекущий(ЧтениеXML);
// Изменяй и записывай вруную
   КонецЦикла;