Имя: Пароль:
1C
1C 7.7
v7: выгрузка XML из 7.7 через v7plus.dll. Создание узла с двоеточием.
0 Kudryashka
 
11.05.16
19:02
Добрый вечер, уважаемые!
делаю так:
    Анализатор=СоздатьОбъект("AddIn.XMLParser");
    Файл=Анализатор.СоздатьДокумент();  
    Файл.Кодировка="UTF-8";
    esf = Файл.СоздатьПодчиненныйЭлемент("esf"); //:invoiceContainer
    esf.УстановитьПространствоИмен("namespace.v1","v1");
    esf.УстановитьПространствоИмен("namespace.esf","esf");
    esf.УстановитьПространствоИмен("namespace.abstractInvoice","a");

получаю
<esf xmlns:a="namespace.abstractInvoice" xmlns:esf="namespace.esf" xmlns:v1="namespace.v1">

Нужно <esf:invoiceContainer xmlns:a="namespace.abstractInvoice" xmlns:esf="namespace.esf" xmlns:v1="namespace.v1">

имя узла с двоеточием. если ставлю в лоб, то ругается на двоеточие.

делала так: V7PLUS.dll  и XMLParser  не получилось. говорит:
1 Kudryashka
 
11.05.16
19:03
+недописало
говорит:
Установка пространства имен возможна ТОЛЬКО для элементов, имеющих префикс, отличный от префикса данного элемента.

как создать узел с двоеточием, помогите пожалуйста!
2 Злопчинский
 
11.05.16
21:06
пиши тупо в текстовый файл последовательно нужные тебе символы/строчки. без привлечения сторонних компонент. и все.
3 Kudryashka
 
11.05.16
21:11
я этот совет видела во всех форумах))) просто я уже написала все через эту компоненту, такую работу проделала, все нормально выгружается, только этот долбанный узел с двоеточием остался, так неохота все переделывать если честно... если решения не найду, то, видимо, придется....
4 Злопчинский
 
11.05.16
22:41
я фиг его знает что такое пространство имен
у меня во всяких обменах без него все ходит...
5 Mr_Rm
 
11.05.16
23:12
Если с минимальной переделкой, и повторные чтение-запись файла некритичны, то можно сохранить XML с именем узла
"esf_invoiceContainer", а потом открыть файл как текст и заменить в нем "<esf_invoiceContainer" на "<esf:invoiceContainer".
6 Злопчинский
 
11.05.16
23:14
угу.. оботкрываешься... если выгрузка раз в пять минут идет.. и файл выгрузки мегабайтов много... обзаменяешьмся
7 Mr_Rm
 
11.05.16
23:58
(6) Таких жестких условий не было, но:
perl -pe "s/esf_invoiceContainer/esf:invoiceContainer/g" <in.xml >out.xml
110Мб файл на внешнем USB2 диске - примерно 6 секунд.
8 Kudryashka
 
12.05.16
06:35
(5),(7) Спасибо большое!
Сделала так:
ТекстДок = СоздатьОбъект("Текст");
ТекстДок.Открыть(НаимФайла);
стр1 = ТекстДок.ПолучитьСтроку(2);
стр2 = СтрЗаменить(Стр1,"esf_invoiceContainer","esf:invoiceContainer");
ТекстДок.ЗаменитьСтроку(2,Стр2);
ТекстДок.Записать(НаимФайла);

Получила то, что надо.