Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


al-1k, xml-схемы КПТ, выписок и паспортов довольно часто меняются, благо последний год не так радикально как раньше. По сути перед вами стоит задача "парсить" эти xml.

Если это касается непосредственно рабочего процесса, то имеет смысл обратить внимание на готовые продукты для работы с xml росреестра. Ищутся в интернете как "XML Конвертер росреестр". Стоят не дорого, у многих есть демо-версии для оценки функционала.

Если это какой-либо личный интерес, то рекомендую самостоятельно изучать вопрос т.к. задача довольно специфична и придется часто "допиливать" под меняющиеся условия.

В PowerShell достаточно легко обрабатывать xml.
В свое время я столкнулся с подобной задачей. Привожу пример кода для "вытягивания" кадастрового номера. Его можно легко доработать.


рабочий фрагмент
Код: Выделить весь код
$PathIn   = "D:\Импорт\"	# каталог, откуда брать xml файлы
$FilesXml = Get-ChildItem $PathIn\* -Include  *.xml
if ($FilesXml -ne $null) {
	ForEach ($FileXmlCurrent in $FilesXml) { #	каждое значение $FilesXml делаем с $FileXmlCurrent:
		$oXmlDocument = New-Object -TypeName System.Xml.XmlDocument #	создаем новый объект как xml
		$oXmlDocument.load($FileXmlCurrent) #	загружаем текущий файл в переменную обработки
		$DocType = $oXmlDocument."xml-stylesheet".split("/")[6]
		$DocVers = $oXmlDocument."xml-stylesheet".split("/")[7]
		if ($DocType -ne $null) {		# тип документа из второй строки xml
			Switch ($DocType) {			# пройдемся по известным типам документов
				KPT {					# КПТ
					Switch ($DocVers) {	# пройдемся по известным версиям документа (начал с 9, остальные старые)
						"09" {			# https://portal.rosreestr.ru/xsl/GKN/KPT/09/common.xsl
							# получаем значения в переменные #--------------------------------------------------------------
							$DocCreateDate   = $oXmlDocument.KPT.CertificationDoc.Date
							$CadastralNumber = $oXmlDocument.KPT.CadastralBlocks.CadastralBlock.CadastralNumber
							Write-Host "тип документа:" `t `t `t $DocType
							Write-Host "версия документа:" `t `t $DocVers
							Write-Host "дата создания документа:" `t $DocCreateDate
							Write-Host "кадастровый номер документа:" `t $CadastralNumber 
							start-sleep -s 5
						}
						Default { # что делать, когда версия документа отлична от 10
							Write-Host "версия кпт не 9"
							start-sleep -s 5
						}
					}
				}
				Default { # что делать, когда тип документа отличен от КПТ
					Write-Host "документ не является кпт"
					start-sleep -s 5
				}
			}
		} else {
			Write-Host "тип документа определить не удалось"
			start-sleep -s 5
		}
	}
} else {
	Write-Host "xml файлы в каталоге $PathIn не найдены"
	start-sleep -s 5
}

Отправлено: 12:42, 10-12-2016 | #3