| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека DLL для чтения XML файлов

Библиотека DLL для чтения XML файлов

Ответ
Поиск в этой теме
Непрочитано 02.11.2021, 13:23 #1
Библиотека DLL для чтения XML файлов
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,079

Какую библиотеку dll лучше всего использовать для чтения XML файлов на VBA?
Прочитал про XmlTextReader
https://docs.microsoft.com/ru-ru/tro...data-from-file
но не понял какой файл надо подключать командой Tools > Rferences в VBA Excel
Так же прочитал про Msxml2.DOMDocument.6.0
https://docs.microsoft.com/en-us/pre...56987(v=vs.85)
и тоже не понял какую библиотеку надо подключить в References
Подскажите пожалуйста что надо подключать для работы с файлами XML!
Просмотров: 3888
 
Непрочитано 02.11.2021, 13:38
1 | #2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


https://www.google.com/search?channe...-b-d&q=vba+xml
https://coderoad.ru/11305/%D0%9A%D0%...1%8C%D1%8E-vba
И далее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.11.2021, 13:39
1 | #3
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


вот

пример - https://gis-lab.info/forum/download/file.php?id=3991
Миниатюры
Нажмите на изображение для увеличения
Название: vba_xml.PNG
Просмотров: 225
Размер:	18.1 Кб
ID:	242289  

Последний раз редактировалось trir, 02.11.2021 в 13:54.
trir вне форума  
 
Автор темы   Непрочитано 02.11.2021, 14:02
#4
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Спасибо! Удалось запустить функцию ImportXML:
Код:
[Выделить все]
Public Function ImportXML(xmlFileName As String, _
   Optional objectPath As String = "*", _
   Optional propertyPath As String = "*", _
   Optional baseCell As Range = Nothing) As DOMDocument60
   ' Экспорт данных из XML-файла
   ' 1. формируется DOMDocument объект (ImportXML)
   ' 2. По заданным параметрам данные из объекта
   '   переписываются в рабочую книгу
   ' ПАРАМЕТРЫ:
   ' xmlFileName - исходный XML-файла
   ' baseCell - исходный диапазон ячеек
   ' objectPath - строка запроса (queryString) на выборку узлов
   ' propertyPath - строка запроса (queryString) на выборку свойств
   '
   Dim xmlDoc As DOMDocument60
   Dim objectNodeList As IXMLDOMNodeList
   Dim objectNode As IXMLDOMElement
   Dim propertyNode As IXMLDOMElement
   Dim baseRow&, baseCol&, rowIndex&, colIndex&

   ' координаты ячеек, куда будем записывать
   If baseCell Is Nothing Then 'установка по умолчанию
    Set baseCell = ActiveCell
   End If
   baseRow = baseCell.Row
   baseCol = baseCell.Column
   
   ' создание DOMDocument объекта
   Set xmlDoc = New DOMDocument60
   xmlDoc.Load xmlFileName ' загрузка XML-файла
   ' Перезапись данный в таблицу рабочей книги
   ' выбор узла
   Set objectNodeList = xmlDoc.DocumentElement.SelectNodes(objectPath)
   If objectNodeList.Length > 0 Then
      colIndex = 0
      ' формирование заголовка таблицы
      Set objectNode = objectNodeList(0)
      For Each propertyNode In _
         objectNode.SelectNodes(propertyPath)
         ActiveSheet.Cells(baseRow, baseCol + colIndex).Value = _
            propertyNode.nodeName
         colIndex = colIndex + 1
      Next
      ' выделение заголовка таблицы (первой строки) жирным шрифтом
      ActiveSheet.Range(Cells(baseRow, _
         baseCol), Cells(baseRow, baseCol + _
         colIndex)).Font.Bold = True
      ' выборка всех остальных строк таблицы
      rowIndex = 1
      For Each objectNode In objectNodeList ' все узлы
         colIndex = 0
         For Each propertyNode In _
            objectNode.SelectNodes(propertyPath)
            ActiveSheet.Cells(baseRow + rowIndex, _
               baseCol + colIndex).Value = _
               propertyNode.Text
         colIndex = colIndex + 1
         Next
         rowIndex = rowIndex + 1
      Next
   End If
   Set ImportXML = xmlDoc ' созданный DOMDocument
End Function
код можно взять на сайте: http://www.vbnet.ru/articles/showarticle.aspx?id=113
Что такое: objectPath - строка запроса (queryString) на выборку узлов
и что такое: propertyPath - строка запроса (queryString) на выборку свойств
Как надо задавать эти строки запросов?
МишаИнженер вне форума  
 
Непрочитано 02.11.2021, 14:07
1 | #5
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


https://ru.wikipedia.org/wiki/XPath
trir вне форума  
 
Автор темы   Непрочитано 03.11.2021, 09:52
#6
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Может кто знает программу, которая вычерчивает кадастровые полигоны из XML файла и добавляет номер кадастра в свойства полилинии? Чтобы потом можно было вытащить номер кадастрового участка из свойств полилинии на VBA
МишаИнженер вне форума  
 
Автор темы   Непрочитано 03.11.2021, 09:59
#7
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Вот пример номера кадастра в свойствах полилинии:
На какой рапорт там дается ссылка и где этот рапорт можно найти?
Миниатюры
Нажмите на изображение для увеличения
Название: Полилиния с номером кадастра.png
Просмотров: 28
Размер:	80.7 Кб
ID:	242329  
МишаИнженер вне форума  
 
Непрочитано 03.11.2021, 10:11
1 | #8
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
Может кто знает программу, которая вычерчивает кадастровые полигоны из XML файла и добавляет номер кадастра в свойства полилинии?
https://github.com/triroakenshield/RosReestrImpLib
trir вне форума  
 
Автор темы   Непрочитано 03.11.2021, 10:24
#9
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


А где ссылка для скачивания файла RosReestrImp.dll? И в обычном AutoCAD эта программа будет работать?
Команада NETLOAD в AutoCAD запускается. Осталось только найти библиотеку RosReestrImp.dll и попробовать вычертить кадастровые планы из файла!
МишаИнженер вне форума  
 
Непрочитано 03.11.2021, 10:26
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
А где ссылка для скачивания файла RosReestrImp.dll?
https://github.com/triroakenshield/R...mpLib/releases

Цитата:
И в обычном AutoCAD эта программа будет работать?
что значит "обычный AutoCAD"?
trir вне форума  
 
Автор темы   Непрочитано 03.11.2021, 10:34
#11
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Версия 2017, появляется ошибка:
Это можно исправить?
Миниатюры
Нажмите на изображение для увеличения
Название: Ошибка при загрузке XML.png
Просмотров: 22
Размер:	25.8 Кб
ID:	242334  
МишаИнженер вне форума  
 
Непрочитано 03.11.2021, 10:44
#12
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
Это можно исправить?
Установи Map 3D
trir вне форума  
 
Автор темы   Непрочитано 03.11.2021, 10:47
#13
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


А версия какая?
МишаИнженер вне форума  
 
Непрочитано 03.11.2021, 10:58
#14
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Лучше 2018, может быть подойдёт и 2017
trir вне форума  
 
Автор темы   Непрочитано 03.11.2021, 11:33
#15
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


А вам известна программа https://rosreestrxml.org/index.php/download
В этой программе можно получать DXF файлы с атрибутами в виде названий кадастровых участков. Но программа создает файлы dxf только с полилиниями.
Номера кадастровых участков не выводит. Поэтому сложности и телефона разработчиков нет.
Если хотите могу XML файл выслать для пробы
МишаИнженер вне форума  
 
Непрочитано 03.11.2021, 11:37
#16
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


нет

Цитата:
Если хотите могу XML файл выслать для пробы
высылай
trir вне форума  
 
Автор темы   Непрочитано 03.11.2021, 12:05
#17
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Пробую получить координаты полигонов с номерами кадастровых участков из следующего файла
По внутреннему составу файла пришли к выводу что в этом файле описано 2 кадастровых участка №5 и №6
в узле <land_records>. Номер кадастрового участка описывается тэгом <cad_number>.
На остальные узлы типа <contour> решили внимание не обращать, так как у них названия участков описываются другими тэгами и учесть все вариации этих тэгов не хватает сил.
В общем мы решили сделать хотя бы что-то вместо того чтобы ничего не делать
Вложения
Тип файла: zip report-9a46b4ec-1c87-4e70-841b-dfc686b37715-SPV-2021-09-29-000921-00-010.zip (64.2 Кб, 6 просмотров)
МишаИнженер вне форума  
 
Непрочитано 03.11.2021, 12:09
#18
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Насколько я помню, у Росреестра есть xlt-схемы для записи / чтения подобных файлов. И там должно быть овердофига всякого описано.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.11.2021, 12:21
#19
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
Насколько я помню, у Росреестра есть xlt-схемы для записи / чтения подобных файлов
наверно xslt

Цитата:
так как у них названия участков описываются другими тэгами и учесть все вариации этих тэгов не хватает сил.
делов то
Код:
[Выделить все]
<?xml version="1.0" encoding="UTF-8"?>
<ShemaList>
	<Shema rootElem="extract_cadastral_plan_territory">
		<Layer Name = "Кадастровый квартал" LayerPath="//cadastral_blocks" EntPath="cadastral_block">
			<FieldRule Name="Квартал" Geom="true" Path="spatial_data">
				<Polygon>
					<LineString Path="entity_spatial/spatials_elements/spatial_element">
						<Point Path="ordinates/ordinate" Xattr="y/text()" Yattr="x/text()"/>
					</LineString>
				</Polygon> 
			</FieldRule>
			<FieldRule Name="Кадастровый номер" Path="cadastral_number/text()" Attr=""/>
		</Layer>
		<Layer Name = "Земельные участки" LayerPath="//cadastral_blocks/cadastral_block/record_data/base_data/land_records" EntPath="land_record">
			<FieldRule Name="Участок" Geom="true" Path="contours_location/contours">
				<Polygon>
					<LineString Path="contour/entity_spatial/spatials_elements/spatial_element">
						<Point Path="ordinates/ordinate" Xattr="y/text()" Yattr="x/text()"/>
					</LineString>
				</Polygon> 
			</FieldRule>			
			<FieldRule Name="Кадастровый номер" Path="object/common_data/cad_number/text()" Attr=""/>
			<FieldRule Name="Вид" Path="object/subtype/value/text()" Attr=""/>
			<FieldRule Name="Местоположение" Path="address_location/address/readable_address/text()" Attr=""/>
			<FieldRule Name="Категория земель" Path="params/category/type/value/text()" Attr=""/>
			<FieldRule Name="Разрешенное использование по документу" Path="params/permitted_use/permitted_use_established/by_document/text()" Attr=""/>
			<FieldRule Name="Кадастровый номер ЕДЗ" Path="cad_links/common_land/common_land_cad_number/cad_number/text()" Attr=""/>
			<FieldRule Name="ref_point_name" Path="address_location/rel_position/ref_point_name/text()" Attr=""/>
		</Layer>
		<Layer Name = "Объекты строения" LayerPath="//cadastral_blocks/cadastral_block/record_data/base_data/build_records" EntPath="build_record">
			<FieldRule Name="Строение" Geom="true" Path="contours">
				<Polygon>
					<LineString Path="contour/entity_spatial/spatials_elements/spatial_element">
						<Point Path="ordinates/ordinate" Xattr="y/text()" Yattr="x/text()"/>
					</LineString>
				</Polygon> 
			</FieldRule>
			<FieldRule Name="Кадастровый номер" Path="object/common_data/cad_number/text()" Attr=""/>
			<FieldRule Name="Вид" Path="object/common_data/type/value/text()" Attr=""/>
			<FieldRule Name="Назначение" Path="params/purpose/value/text()" Attr=""/>
			<FieldRule Name="Местоположение" Path="address_location/address/readable_address/text()" Attr=""/>
		</Layer>
		<Layer Name = "Объекты сооружения" LayerPath="//cadastral_blocks/cadastral_block/record_data/base_data/construction_records" EntPath="construction_record">
			<FieldRule Name="geom" Geom="true" Path="contours">
					<LineString Path="contour/entity_spatial/spatials_elements/spatial_element">
						<Point Path="ordinates/ordinate" Xattr="y/text()" Yattr="x/text()"/>
					</LineString>				 
			</FieldRule>
			<FieldRule Name="Кадастровый номер" Path="object/common_data/cad_number/text()" Attr=""/>
			<FieldRule Name="Вид" Path="object/common_data/type/value/text()" Attr=""/>
			<FieldRule Name="Назначение" Path="params/purpose/text()" Attr=""/>
			<FieldRule Name="Местоположение" Path="address_location/address/readable_address/text()" Attr=""/>
		</Layer>
		<Layer Name = "Границы муниципальных образований" LayerPath="//cadastral_blocks/cadastral_block/municipal_boundaries" EntPath="municipal_boundary_record">
			<FieldRule Name="Граница" Geom="true" Path="b_contours_location/contours">
				<Polygon>
					<LineString Path="contour/entity_spatial/spatials_elements/spatial_element">
						<Point Path="ordinates/ordinate" Xattr="y/text()" Yattr="x/text()"/>
					</LineString>
				</Polygon> 
			</FieldRule>
			<FieldRule Name="Учетный номер" Path="b_object_municipal_boundary/b_object/reg_numb_border/text()" Attr=""/>
			<FieldRule Name="Тип границы" Path="b_object_municipal_boundary/b_object/type_boundary/value/text()" Attr=""/>
		</Layer>
		<Layer Name = "Границы населенных пунктов" LayerPath="//cadastral_blocks/cadastral_block/inhabited_locality_boundaries" EntPath="inhabited_locality_boundary_record">
			<FieldRule Name="Граница" Geom="true" Path="b_contours_location/contours">
				<Polygon>
					<LineString Path="contour/entity_spatial/spatials_elements/spatial_element">
						<Point Path="ordinates/ordinate" Xattr="y/text()" Yattr="x/text()"/>
					</LineString>
				</Polygon> 
			</FieldRule>
			<FieldRule Name="Учетный номер" Path="b_object_inhabited_locality_boundary/b_object/reg_numb_border/text()" Attr=""/>
			<FieldRule Name="Тип границы" Path="b_object_inhabited_locality_boundary/b_object/type_boundary/value/text()" Attr=""/>
		</Layer>
		<Layer Name = "ТерЗоны и ЗОУИТы" LayerPath="//cadastral_blocks/cadastral_block/zones_and_territories_boundaries" EntPath="zones_and_territories_record">
			<FieldRule Name="Зона" Geom="true" Path="b_contours_location/contours">
				<Polygon>
					<LineString Path="contour/entity_spatial/spatials_elements/spatial_element">
						<Point Path="ordinates/ordinate" Xattr="y/text()" Yattr="x/text()"/>
					</LineString>
				</Polygon> 
			</FieldRule>
			<FieldRule Name="Учетный номер" Path="b_object_zones_and_territories/b_object/reg_numb_border/text()" Attr=""/>
			<FieldRule Name="Вид зоны" Path="b_object_zones_and_territories/b_object/type_boundary/value/text()" Attr=""/>
			<FieldRule Name="Описание" Path="b_object_zones_and_territories/type_zone/value/text()" Attr=""/>			
		</Layer>
		<Layer Name = "Точки" LayerPath="//ordinates" EntPath="ordinate">
			<FieldRule Name="geom" Geom="true" Path="">
				<Point Path="" Xattr="y/text()" Yattr="x/text()"/>
			</FieldRule>
		</Layer>
	</Shema>
</ShemaList>
держи
Миниатюры
Нажмите на изображение для увеличения
Название: extract_cadastral_plan_territory_scr1.PNG
Просмотров: 11
Размер:	23.3 Кб
ID:	242349  
Вложения
Тип файла: zip rule.zip (1.2 Кб, 4 просмотров)

Последний раз редактировалось trir, 03.11.2021 в 12:29.
trir вне форума  
 
Непрочитано 03.11.2021, 12:28
#20
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от trir Посмотреть сообщение
наверно xslt
Да, сорри, напутал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека DLL для чтения XML файлов

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертация файлов Admin Прочее. Программное обеспечение 7515 19.03.2024 14:27
Библиотеки электронных книг Кочетков Андрей Поиск литературы, чертежей, моделей и прочих материалов 303 21.06.2023 08:35
DwgRuLispLib: Функция открытия диалога Open\Save As файла (файлов) Supermax Библиотека функций 20 14.03.2018 10:05
DwgRuLispLib: Команда. Загрузка lisp файлов из указанной папки VVA Библиотека функций 7 15.02.2018 10:10
Автокад в интернете, самое начало Mme St-Perle AutoCAD 86 12.05.2010 15:11