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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] замена значения в xml-файле

Ответить
Настройки темы
CMD/BAT - [решено] замена значения в xml-файле

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


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

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


имеется файл xml следующего содержания:
Код: Выделить весь код
<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="https://portal.rosreestr.ru/xsl/GKN/Vidimus/04/common.xsl"?><Region_Cadastr_Vidimus_KV><eDocument CodeType="114" Version="04">
все в одну строку
необходим bat файл который будет заменять текст помеченный голубым на: \\serv\папки\xml\common.xsl

вторая задача:
запустить IE в автономном режиме на просмотр этого файла
пока bat умеет лишь брать имя xml который лежит в той же папке в переменную:

читать дальше »

@title [replace]
@echo off
Color 0e

Set find="https://portal.rosreestr.ru/xsl/GKN/Vidimus/04/common.xsl"
Set replace="\\serv\папки\xml\common.xsl"

rem берем имя от файла с разрешением xml:
for %%i in (*.xml) do set FILENAME=%FILENAME% %%i
rem убираем пробел перед именем
set FILEnamefull=%FILENAME:~1%
rem убираем разрешение (4 символа с конца)
set FILEname=%FILEnamefull:~0,-4%
rem выводим результат на экран
echo %FILEnamefull%
echo %FILEname%


в результате должен получится файл %FILEname%_local.xml и открыться в IE

Отправлено: 13:29, 17-09-2012

 

Новый участник


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

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


Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
Set _find="https://portal.rosreestr.ru/xsl/GKN/Vidimus/04/common.xsl"
Set _replace="\\serv\папки\xml\common.xsl"
for %%J in (*.xml) do (
  set s=%%~nJ
  if "!s:~-6!" neq "_local" (
    for /f "delims=" %%I in (%%~sJ) do (
      set s=%%I
      echo !s:%_find%=%_replace%!>"%%~nJ_local.xml"
    )
    start iexplore.exe "%%~dpJ%%~nJ_local.xml"
  )
)

Последний раз редактировалось Bob256, 17-09-2012 в 18:57.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:45, 17-09-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


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


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

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


благодарю за помощь, но отрабатывает не совсем корректно:
требуется заменить только указанное значение, а в результате отработки скрипта получается 2 разных файла (во втором отсутствует заменяемое значение)
прикладываю файл-пример, чтобы Вы могли проверить

Последний раз редактировалось firstarey, 18-09-2012 в 06:46. Причина: вложение


Отправлено: 06:44, 18-09-2012 | #3


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


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

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



Последний раз редактировалось firstarey, 06-03-2014 в 07:23.


Отправлено: 06:48, 18-09-2012 | #4


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


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

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


попробовал так же через CHGSTR.EXE, но он убивает кодировку и в итоговом файле вместо русских букв кракозябры

есть ли какой то способ обработать xml файл заменив >< на >\n< (т.е. перенос строк после закрытия тега) ?
тогда было бы проще - можно заменить вторую строку целиком

Отправлено: 09:54, 18-09-2012 | #5


Ветеран


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

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


firstarey, пробуйте WSH:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strFile
Dim objNode

If WScript.Arguments.Count = 1 Then
	strFile = WScript.Arguments.Item(0)
	
	If WScript.CreateObject("Scripting.FileSystemObject").FileExists(strFile) Then
		With WScript.CreateObject("MSXML2.DOMDocument")
			.async = False
			.load strFile
			
			If .parseError.errorCode = 0 Then
				For Each objNode In .childNodes
					If objNode.nodeType = 7 Then
						If objNode.baseName = "xml-stylesheet" Then
							If objNode.data = "type=""text/xsl"" href=""https://portal.rosreestr.ru/xsl/GKN/Vidimus/04/common.xsl""" Then
								WScript.Echo "Node found"
								
								objNode.data = "type=""text/xsl"" href=""\\serv\папки\xml\common.xsl"""
								
								Exit For
							End If
						End If
					End If
				Next
			Else
				WScript.Echo "Error [" & .parseError.errorCode & "] in xml [" & strFile & "]"
			End If
			
			.save strFile
		End With
	Else
		WScript.Echo "File [" & strFile & "] not found"
	End If
Else
	WScript.Echo "Usage: " & WScript.ScriptName & " <xml-file>"
End If

WScript.Quit 0


Update: Забыл про:
Цитата firstarey:
вторая задача:
запустить IE в автономном режиме на просмотр этого файла »
читать дальше »
Код: Выделить весь код
Option Explicit

Const READYSTATE_COMPLETE = 4

Dim strFile
Dim objNode
Dim objIE


If WScript.Arguments.Count = 1 Then
	strFile = WScript.Arguments.Item(0)
	
	If WScript.CreateObject("Scripting.FileSystemObject").FileExists(strFile) Then
		With WScript.CreateObject("MSXML2.DOMDocument")
			.async = False
			.load strFile
			
			If .parseError.errorCode = 0 Then
				For Each objNode In .childNodes
					If objNode.nodeType = 7 Then
						If objNode.baseName = "xml-stylesheet" Then
							If objNode.data = "type=""text/xsl"" href=""https://portal.rosreestr.ru/xsl/GKN/Vidimus/04/common.xsl""" Then
								WScript.Echo "Node found"
								
								objNode.data = "type=""text/xsl"" href=""\\serv\папки\xml\common.xsl"""
								
								.save strFile
								
								Exit For
							End If
						End If
					End If
				Next
			Else
				WScript.Echo "Error [" & .parseError.errorCode & "] in xml [" & strFile & "]"
			End If
		End With
		
		With WScript.CreateObject("InternetExplorer.Application")
			.Navigate("file:///" & strFile)
			
			Do
				WScript.Sleep 100
			Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE
			
			.Visible = True
		End With
	Else
		WScript.Echo "File [" & strFile & "] not found"
	End If
Else
	WScript.Echo "Usage: " & WScript.ScriptName & " <xml-file>"
End If

WScript.Quit 0

Последний раз редактировалось Iska, 18-09-2012 в 11:06.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:55, 18-09-2012 | #6


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


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

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


Iska, простите, а как запустить *.wsh файл ?
дважды нажимаю выходит окно "сценарий не указан"
совсем не знаком с wsh

Отправлено: 11:56, 18-09-2012 | #7


Ветеран


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

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


firstarey, сохраните код в файле с расширением «.vbs» (VBScript — один из языков, поддерживаемых WSH «искаропки»). Перетащите на него Ваш xml (сначала опробуйте на копии).
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:00, 18-09-2012 | #8


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


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

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


средствами CHGSTR.EXE довольно легко решается задача, но проблема в том, что он все русские символы переводит в CP1251 из UTF-8
может есть какой простой способ вернуть кодировку на место ?

Iska, Ваш скрипт работает, большое спасибо

Отправлено: 12:03, 18-09-2012 | #9


Новый участник


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

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


Для полноценного локального отображения данных выписок, необходимо немного подредактировать сам шаблон преобразования, т.к. в нем имеется ссылка на Портал Росреестра. Необходимо убрать эту ссылку. Либо же, как вариант, воспользоваться специальной версией преобразований для локального просмотра.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:45, 12-02-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] замена значения в xml-файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Сравнение файлов и замена значения из одного файла в другой. Aleks911tat Скриптовые языки администрирования Windows 12 25-08-2012 22:27
работа с файлами в HEX формате, поиск и замена по 16ричному адресу значения в файле. andr_mozg AutoIt 3 10-03-2012 10:20
CMD/BAT - [решено] Поиск файла, значения в файле и создания для них переменных popoves Скриптовые языки администрирования Windows 4 29-02-2012 20:59
CMD/BAT - [решено] Задавать значения и путь в текстовом файле white155 Скриптовые языки администрирования Windows 4 16-04-2011 14:10
Теория - Можно ли достать значения цены с графика, получив их в текстовом файле? evg64 Программирование и базы данных 1 26-10-2009 07:26




 
Переход