Имя: Пароль:
1C
1С v8
Как сделать чтобы ФабрикаXDTO не писала в XML пространство имен?
0 dimqa
 
29.04.13
17:15
Как сделать чтобы ФабрикаXDTO не писала в XML пространство имен?
Вообще так возможно сделать?

Код:
   дТип = ФабрикаXDTO.Тип("http://lh","Корень");
   ЧтениеXML = новый ЧтениеXML;
   ЧтениеXML.ОткрытьФайл("ish.xml");
   дОбъект = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,дТип);
   ЧтениеXML.Закрыть();
   
   ЗаписьXML = новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("target.xml","Windows-1251");
   ЗаписьXML.ЗаписатьОбъявлениеXML();
   ФабрикаXDTO.ЗаписатьXML(ЗаписьXML,дОбъект);
   ЗаписьXML.Закрыть();

Исходный текст XML:
<?xml version="1.0" encoding="windows-1251"?>
<Корень>
   <Поле1>Значение1</Поле1>
   <Сотрудники>
       <Сотрудник>
           <Фамилия>Иванов</Фамилия>
           <Имя>Иван</Имя>
       </Сотрудник>
       <Сотрудник>
           <Фамилия>Петров</Фамилия>
           <Имя>Петр</Имя>
       </Сотрудник>
   </Сотрудники>
</Корень>

Результирующий XML:
<?xml version="1.0" encoding="Windows-1251"?>
<Корень xmlns="http://lh" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Поле1 xmlns="">Значение1</Поле1>
   <Сотрудники xmlns="">
       <Сотрудник>
           <Фамилия>Иванов</Фамилия>
           <Имя>Иван</Имя>
       </Сотрудник>
       <Сотрудник>
           <Фамилия>Петров</Фамилия>
           <Имя>Петр</Имя>
       </Сотрудник>
   </Сотрудники>
</Корень>

Как убрать эти самые xmlns? Чтобы прийти к исходному тексту
1 Fragster
 
гуру
29.04.13
17:17
а зачем ты указываешь при создание?
2 Fragster
 
гуру
29.04.13
17:17
это самое пространство имен?
3 dimqa
 
29.04.13
17:19
(2) xmlns="http://lh" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Вот это, а так же  xmlns=""
4 dimqa
 
29.04.13
17:21
а как иначе? Если тип не указать вообще в <anyType> вместо корня записывает
5 zladenuw
 
29.04.13
17:22
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML,дОбъект,,"");
6 dimqa
 
29.04.13
17:25
(5) Получше, но всё равно осталось у корня((

<?xml version="1.0" encoding="Windows-1251"?>
<Корень xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Поле1>Значение1</Поле1>
   <Сотрудники>
       <Сотрудник>
           <Фамилия>Иванов</Фамилия>
           <Имя>Иван</Имя>
       </Сотрудник>
       <Сотрудник>
           <Фамилия>Петров</Фамилия>
           <Имя>Петр</Имя>
       </Сотрудник>
   </Сотрудники>
</Корень>
7 Serginio1
 
29.04.13
17:37
8 dimqa
 
29.04.13
17:37
Очень не хочется дописывать в код:
   Текст = новый ТекстовыйДокумент;
   Текст.Прочитать("target.xml");
   Текст.ЗаменитьСтроку(2,"<Корень>");
   текст.Записать("target.xml",КодировкаТекста.ANSI);

т.к. Файлик достаточно большой, а комп не достаточно быстрый

Должно же быть какое то решение, кроме как через Ж
9 dimqa
 
29.04.13
17:47
(7) Либо я что то не так понял, либо это не помогло

Код

ЧтениеXML = новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("ish.XML");
ЧтениеXML.ПерейтиКСодержимому();
дТип=ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя);
   
дОбъект = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,дТип);

ЧтениеXML.Закрыть();
   
ЗаписьXML = новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("target.xml","Windows-1251");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML,дОбъект,,"");
ЗаписьXML.Закрыть();
10 zladenuw
 
29.04.13
17:47
ЧтениеXML = новый ЧтениеXML;
   ЧтениеXML.ОткрытьФайл("D:\test2.xml");
   дОбъект = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
   дОбъект.Сбросить("Поле1");
   ЧтениеXML.Закрыть();
   
   ЗаписьXML = новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("D:\target.xml","Windows-1251");
   ЗаписьXML.ЗаписатьОбъявлениеXML();
   ФабрикаXDTO.ЗаписатьXML(ЗаписьXML,дОбъект);
   ЗаписьXML.Закрыть();
11 dimqa
 
29.04.13
17:54
(10) Не привело к желаемому результату

<?xml version="1.0" encoding="Windows-1251"?>
<anyType xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Сотрудники xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
       <Сотрудник>
           <Фамилия>Иванов</Фамилия>
           <Имя>Иван</Имя>
       </Сотрудник>
       <Сотрудник>
           <Фамилия>Петров</Фамилия>
           <Имя>Петр</Имя>
       </Сотрудник>
   </Сотрудники>
</anyType>

Даже хуже чем было)
12 dimqa
 
29.04.13
17:54
Похоже придётся остановиться на варианте с заменой второй строки. Печально
13 Serginio1
 
29.04.13
17:55
(12) Или пропустить её при чтении.
14 Serginio1
 
29.04.13
17:58
А чем тебе мешает xmlns?
У каждого объекта должно быть пространство имен.
15 zladenuw
 
29.04.13
18:03
(10) завтык надо вот так ФабрикаXDTO.ЗаписатьXML(ЗаписьXML,дОбъект,,"");
16 zladenuw
 
29.04.13
18:03
и будет такая хмл

<?xml version="1.0" encoding="WINDOWS-1251"?>
-<anyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns=""> -<Сотрудники> -<Сотрудник> <Фамилия>Иванов</Фамилия> <Имя>Иван</Имя> </Сотрудник> -<Сотрудник> <Фамилия>Петров</Фамилия> <Имя>Петр</Имя> </Сотрудник> </Сотрудники> </anyType>
17 dimqa
 
29.04.13
21:00
(14) Просто на пути от одной точки до другой - нужно сделать некоторую обработку XML. Хочу сделать, чтобы было практически не заметно, вот и заморочился... Впрочем желаемого результата добился да и ладно.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой