|
v7: Как парсить xml-документ с пространствами имен через v7plus.dll? | ☑ | ||
---|---|---|---|---|
0
Провинциальный 1сник
12.10.17
✎
15:52
|
Есть xml-документ (реестр выгруженной зарплаты из ЗУП3), нужно его загрузить в семерку. С xml раньше в семерке работал, создавал и читал файлы через v7plus - но с пространствами имен и схемами не сталкивался. А тут при попытке загрузить файл таким кодом:
Анализатор=СоздатьОбъект("AddIn.XMLParser"); ОсновнойДокумент=Анализатор.СоздатьДокумент(); ОсновнойДокумент.Загрузить(ИмяФайлаЗагрузки); Вылетает такая вот ошибка: Type '{http://v8.1c.ru/edi/edi_stnd/109}СчетПК' is not found in Schema. [<СчетаПК xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://v8.1c.ru/edi/edi_stnd/109" xsi:type="СчетПК"... Если из xml-файла вырезать эту муть с пространствами имен, то он парсится нормально. Подскажите, что нужно написать в коде, чтобы правильно парсить такие файлы? |
|||
1
Kuzmich123
12.10.17
✎
16:15
|
Правильно ругается, он не видит схемы XSD с описанием этого типа, а схему в 1с прикручивается только через фабрику XDTO в 8.х, так что перспективы у тебя так себе
|
|||
2
HawkEye
12.10.17
✎
16:32
|
(1) как же работает ЕГАИС в 7.7?
|
|||
3
Провинциальный 1сник
12.10.17
✎
16:33
|
(1) А нет возможности заставить парсер игнорировать описание схемы пространства имен, чтобы xml парсился в стандартной схеме?
|
|||
4
Kuzmich123
12.10.17
✎
16:46
|
2 (1) Хороший, вопрос, кстати. ХЗ. Я с 7.7 уже 5 лет не работаю
|
|||
5
Kuzmich123
12.10.17
✎
16:46
|
2 (1) => 2 (2)
|
|||
6
Провинциальный 1сник
12.10.17
✎
16:53
|
Методом гугления определил, что проблема может быть в версии библиотеки msxml. После отключения msxml4.dll и регистрации msxml3.dll всё заработало нормально.
regsvr32 /u msxml4.dll regsvr32 msxml3.dll Но это костыль, так как если какая-то программа потребует именно msxml4 - то.. |
|||
7
Serginio1
12.10.17
✎
17:22
|
||||
8
AliAksA
13.10.17
✎
09:37
|
(0) ну можно открыть программно как текст и заменить при помощи СтрЗаменить() ненужную муть на "";
ну а так лавай примерчик-с: Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") = 1 Тогда ИначеЕсли ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") = 1 Тогда Иначе Предупреждение("Компонента v7plus.dll не найдена!"); СтатусВозврата(0); Возврат; КонецЕсли; Анализатор = СоздатьОбъект("AddIn.XMLParser"); Коллекция = Анализатор.СоздатьКоллекциюСхем(); Дакумент = Анализатор.СоздатьДокумент(); Дакумент.Кодировка = "UTF-8"; Дакумент.РазрешатьВнешниеСсылки = 1; Дакумент.Схемы = Коллекция; Если ТипЭСЧФ = Перечисление.ТипыЭСЧФ.Исходный Тогда ФайлСхемы = "Schemas\MNSATI_original.xsd"; ИначеЕсли ТипЭСЧФ = Перечисление.ТипыЭСЧФ.Дополнительный Тогда ФайлСхемы = "Schemas\MNSATI_additional.xsd"; ИначеЕсли ТипЭСЧФ = Перечисление.ТипыЭСЧФ.Исправленный Тогда ФайлСхемы = "Schemas\MNSATI_fixed.xsd"; Иначе Сообщить("В документе " + глНомерДатаДока(ТекущийДокумент()) + " не была определена схема для проверки !", "!"); СтатусВозврата(0); Возврат; КонецЕсли; Коллекция.ДобавитьСхему("http://www.w3schools.com", КаталогИБ()+ФайлСхемы); // УНП организации Данные = Дакумент.СоздатьПодчиненныйЭлемент("issuance", , "http://www.w3schools.com"); Данные.УстановитьАтрибут("sender", СокрЛП(Константа.ОсновнойКонтрагент.ИНН)); Ветка = Данные.СоздатьПодчиненныйЭлемент("general"); |
|||
9
AliAksA
13.10.17
✎
09:41
|
(0) ох сори не прально читал, при загрузке нужно читать как последовательный документ:
Анализатор = СоздатьОбъект("AddIn.XMLParser"); ФайлДанных = Анализатор.СоздатьПоследовательноСчитываемыйДокумент(); ФайлДанных.СвязатьСФайлом(перПуть); |
|||
10
big
13.10.17
✎
14:06
|
(6) Вот именно из-за этого и в топку v7plus (((
DOMDocument = СоздатьОбъект("MSXML2.DOMDocument"); DOMDocument.load(ИмяФайла); и вперёд http://www.script-coding.com/XMLDOMscripts.html |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |