PDA

Показать полную графическую версию : [решено] замена значения в xml-файле


Страниц : [1] 2

firstarey
17-09-2012, 13:29
имеется файл 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

Bob256
17-09-2012, 18:45
@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"
)
)

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

firstarey
18-09-2012, 06:48
http://rghost.ru/40431526

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

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

Iska
18-09-2012, 10:55
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: Забыл про:
вторая задача:
запустить 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

firstarey
18-09-2012, 11:56
Iska, простите, а как запустить *.wsh файл ?
дважды нажимаю выходит окно "сценарий не указан"
совсем не знаком с wsh :blush:

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

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

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

th1zar@vk
12-02-2013, 10:45
Для полноценного локального отображения данных выписок, необходимо немного подредактировать сам шаблон преобразования, т.к. в нем имеется ссылка на Портал Росреестра. Необходимо убрать эту ссылку. Либо же, как вариант, воспользоваться специальной версией преобразований для локального просмотра.

Kadoh
10-11-2017, 11:35
Товарищи, добрый день. Помоги пожалуйста написать батник. Имеется xml файл следующего содержания:
<?xml version="1.0" encoding="UTF-8"?>
<PacketEPD xmlns="urn:cbr-ru:ed:v2.0" EDQuantity="1" Sum="175000" SystemCode="01" EDNo="1" EDDate="2017-11-03" EDAuthor="9999999999">
<ED101 TransKind="01" Priority="5" SystemCode="01" EDReceiver="0000000000" Sum="175000" EDNo="000000000" EDDate="2017-11-02" EDAuthor="0702615000">
<AccDoc AccDocNo="000000" AccDocDate="2017-11-02"></AccDoc>
<Payer PersonalAcc="00000000000000000000" INN="0000000000" KPP="000000000">
<Name>тест</Name>
<Bank BIC="000000000" CorrespAcc="00000000000000000000"></Bank>
</Payer>
<Payee PersonalAcc="00000000000000000000" INN="000000000" KPP="000000000">
<Name>тест "тест"</Name>
<Bank BIC="000000000" CorrespAcc="00000000000000000000"></Bank>
</Payee>
<Purpose>тест</Purpose>
</ED101>
</PacketEPD>

В нем батником нужно значение CorrespAcc= заменить на другой счет и дата в поле EDDate должно равняться дате в поле AccDocDate.

Iska
10-11-2017, 12:25
заменить на другой счет »
Откуда брать значение этого «другого счёта»?

Kadoh
10-11-2017, 12:35
Не большое уточнение в xml файле значение CorrespAcc="30101810600000000758" мне нужно заменить этот счет на 30109810060340000009. Мне кажется это значение нужно прописать в батнике.

Iska
10-11-2017, 13:54
значение CorrespAcc="30101810600000000758" »
Заменить, только если «CorrespAcc» будет равен «30101810600000000758»? Или неважно, что там будет, меняем в любом случае?

Kadoh
10-11-2017, 13:55
только если равен

Iska
10-11-2017, 17:35
Kadoh, а в каких разделах менять — в «Payer», в «Payee» или в любом/обоих?

Kadoh
10-11-2017, 17:58
Payee

Iska
10-11-2017, 19:25
Kadoh, на WSH:
Option Explicit

Dim strFile

Dim strCurrCorrespAccValue
Dim strNewCorrespAccValue

Dim objXMLDOMElement


strCurrCorrespAccValue = "30101810600000000758"
strNewCorrespAccValue = "30109810060340000009"

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

If .load(strFile) Then
For Each objXMLDOMElement In .selectNodes("/PacketEPD/ED101/Payee/Bank[@CorrespAcc=""" & strCurrCorrespAccValue & """]")
objXMLDOMElement.setAttribute "CorrespAcc", strNewCorrespAccValue
Next

.save strFile
Else
WScript.Echo "Can't load xml content from [" & strFile & "]."
End If
End With
Else
WScript.Echo "File [" & strFile & "] not found"
End If
Else
WScript.Echo "Usage: " & WScript.ScriptName & " <xml-file>"
End If

WScript.Quit 0
Путь к файлу xml задаётся параметром скрипта (также можно просто перетянуть xml-файл на скрипт в Проводнике).

Kadoh
13-11-2017, 10:56
Iska, пр запуске выдает ошибку:
Строка: 1
Символ: 8
Ошибка: Предполагается наличие ";"
Код: 800А03ЕС

Kadoh
13-11-2017, 11:23
Iska подскажи в каком месте указать путь к файлу?




© OSzone.net 2001-2012