Eine xml Datei per Script anpassen
Hallo zusammen
Ich müsste mal wieder einige Dateien anpassen, doch leider keine Ahnung wie, ohne gleich die ganze Datei zu ersetzen, wobei die restlichen Settings je User verloren gehen würden.
Daher die Idee, das mit nem Script zu lösen, das mir einfach alle xml's sucht und diese entsprechend anpasst.
Die Ordnerstruktur sähe wie folgt aus:
Ordner a
Ordner b
Ordner c
Ordner ..
die Weiteren Unterordner sind statisch, bzw. in einigen gibts es keine passende Datei/Unterordner. Statischer teil ..\Avaya\Avaya one-X Communicator\config.xml
also z.B. so: D:\Ordner a\Avaya\Avaya one-X Communicator\config.xm
Die Zeilen in den xml-Dateien varieren. Für mich wichtig ist, dass hier gemäss Beispiel-xml der "value" von "nameUserEnableWebDialIE" auf 0 gesetzt wird (aktueller Wert ist in der Regel 1) siehe Zeile 177).
Ich müsste mal wieder einige Dateien anpassen, doch leider keine Ahnung wie, ohne gleich die ganze Datei zu ersetzen, wobei die restlichen Settings je User verloren gehen würden.
Daher die Idee, das mit nem Script zu lösen, das mir einfach alle xml's sucht und diese entsprechend anpasst.
Die Ordnerstruktur sähe wie folgt aus:
Ordner a
Ordner b
Ordner c
Ordner ..
die Weiteren Unterordner sind statisch, bzw. in einigen gibts es keine passende Datei/Unterordner. Statischer teil ..\Avaya\Avaya one-X Communicator\config.xml
also z.B. so: D:\Ordner a\Avaya\Avaya one-X Communicator\config.xm
Die Zeilen in den xml-Dateien varieren. Für mich wichtig ist, dass hier gemäss Beispiel-xml der "value" von "nameUserEnableWebDialIE" auf 0 gesetzt wird (aktueller Wert ist in der Regel 1) siehe Zeile 177).
<?xml version="1.0"?>
<ConfigData>
<version>1</version>
<parameter>
<name>CurrentSkin</name>
<value>1</value>
</parameter>
<parameter>
<name>UserPreferredLanguage</name>
<value>English</value>
</parameter>
<parameter>
<name>LanguageInUse</name>
<value>English</value>
</parameter>
<parameter>
<name>OwnIPAddress</name>
<value>127.0.0.1</value>
</parameter>
<parameter>
<name>ReUseIPAddress</name>
<value>127.0.0.1</value>
</parameter>
<parameter>
<name>Layer2PriorityForAudio</name>
<value>-1</value>
</parameter>
<parameter>
<name>SipProxyServerList</name>
<value>127.0.0.1</value>
</parameter>
<parameter>
<name>DialPlanCountryCode</name>
<value>41</value>
</parameter>
<parameter>
<name>DialPlanInternationalAccessCode</name>
<value>00</value>
</parameter>
<parameter>
<name>DialPlanLongDistanceAccessCode</name>
<value></value>
</parameter>
<parameter>
<name>DialPlanOutsideLineAccessCode</name>
<value>0</value>
</parameter>
<parameter>
<name>RtpPortLow</name>
<value>2048</value>
</parameter>
<parameter>
<name>RtpPortRange</name>
<value>1281</value>
</parameter>
<parameter>
<name>SipUserAccount</name>
<value>322</value>
</parameter>
<parameter>
<name>SipUserId</name>
<value>322</value>
</parameter>
<parameter>
<name>SipUserPassword</name>
<value></value>
</parameter>
<parameter>
<name>PrevSipUserAccount</name>
<value>322</value>
</parameter>
<parameter>
<name>SignalProtocol</name>
<value>1</value>
</parameter>
<parameter>
<name>UserEnableVideo</name>
<value>0</value>
</parameter>
<parameter>
<name>AudioDeviceList</name>
<value><AudioDeviceList>
<RingViaSecondDevice>true</RingViaSecondDevice>
<RingingDeviceEnabled>false</RingingDeviceEnabled>
<playback>
<device>
<guid>{0.0.0.00000000}.{046e54cb-01f5-45b7-83d9-d29115765493}</guid>
<name>Lautsprecher (Realtek High Definition Audio)</name>
<volume>50</volume>
<state>true</state>
<available>true</available>
</device>
<device>
<guid>{0.0.0.00000000}.{28a667b6-c080-4f5c-9442-c166aed12c9d}</guid>
<name>Lautsprecher (High Definition Audio-Gerät)</name>
<volume>50</volume>
<state>false</state>
<available>false</available>
</device>
</playback>
<microphone>
<device>
<guid>{0.0.1.00000000}.{327e7f46-255b-42fc-9c4e-60d0b98d6e84}</guid>
<name>Mikrofon (Realtek High Definition Audio)</name>
<volume>50</volume>
<state>true</state>
<available>true</available>
</device>
<device>
<guid>{0.0.1.00000000}.{4eeee7ea-f4ba-4ade-b4f3-fe26f3b3d3aa}</guid>
<name>Mikrofon (High Definition Audio-Gerät)</name>
<volume>50</volume>
<state>false</state>
<available>false</available>
</device>
</microphone>
<ringer>
<device>
<guid>{0.0.0.00000000}.{28a667b6-c080-4f5c-9442-c166aed12c9d}</guid>
<name>Lautsprecher (High Definition Audio-Gerät)</name>
<volume>50</volume>
<state>false</state>
<available>false</available>
</device>
<device>
<guid>{0.0.0.00000000}.{046e54cb-01f5-45b7-83d9-d29115765493}</guid>
<name>Lautsprecher (Realtek High Definition Audio)</name>
<volume>50</volume>
<state>true</state>
<available>true</available>
</device>
</ringer>
</AudioDeviceList>
</value>
</parameter>
<parameter>
<name>LoginMode</name>
<value>2</value>
</parameter>
<parameter>
<name>DialPlanAreaCode</name>
<value>032</value>
</parameter>
<parameter>
<name>DialPlanLocalCallPrefix</name>
<value>032</value>
</parameter>
<parameter>
<name>DialPlanExtensionLengthList</name>
<value>3</value>
</parameter>
<parameter>
<name>DialPlanPBXPrefix</name>
<value>6862</value>
</parameter>
<parameter>
<name>MaxC2DDialableLength</name>
<value>12</value>
</parameter>
<parameter>
<name>BlockEmergencyCall</name>
<value>1</value>
</parameter>
<parameter>
<name>AlternateGKAddressList</name>
<value>127.0.0.1</value>
</parameter>
<parameter>
<name>VideoRtpPortLow</name>
<value>2688</value>
</parameter>
<parameter>
<name>VideoRtpPortRange</name>
<value>640</value>
</parameter>
<parameter>
<name>UserEnableWebDialIE</name>
<value>0</value>
</parameter>
<parameter>
<name>UserEnableWebDialFirefox</name>
<value>0</value>
</parameter>
<parameter>
<name>MicrosoftOutlookContacts</name>
<value>1</value>
</parameter>
<parameter>
<name>AvayaSearchDirectory</name>
<value>1</value>
</parameter>
</ConfigData>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 211613
Url: https://administrator.de/forum/eine-xml-datei-per-script-anpassen-211613.html
Ausgedruckt am: 22.04.2025 um 17:04 Uhr
12 Kommentare
Neuester Kommentar
Hallo,
dieses Skript brauchst du nur an deine Ordnerstruktur anzupassen.
lg
dieses Skript brauchst du nur an deine Ordnerstruktur anzupassen.
@echo OFF &SETLOCAL
SET "value=<value>0</value>"
SET "fxml=file.xml"
SET "fnew=file.new"
FOR /f "delims=:" %%a IN ('findstr /n "UserEnableWebDialIE" "%fxml%"') DO SET "sline=%%a"
SETLOCAL ENABLEDELAYEDEXPANSION
< "%fxml%" (
FOR /l %%a IN (1,1,%sline%) DO (
SET "line="
SET /p "line="
ECHO(!line!
)
ECHO(!value!)>"%fnew%"
ENDLOCAL
SET /a sline+=1
<"%fxml%" MORE +%sline% >>"%fnew%"
TYPE "%fnew%"
lg
Hallo AK-David,
wenn's VBScript sein darf:
(Zeile 1 noch den Ordner angeben in dem jeweiligen Ordner liegen)
Grüße Uwe
gelöste Beitrage bitte auch als solche markieren.Danke
wenn's VBScript sein darf:
(Zeile 1 noch den Ordner angeben in dem jeweiligen Ordner liegen)
ROOTFOLDER = "D:\DeinOrdner in den die Ordner liegen"
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set fldrROOT = fso.GetFolder(ROOTFOLDER)
parseFolders fldrROOT,True
Function parseFolders(objFolder,boolRecursion)
For Each file In objFolder.Files
If LCase(file.Name) = "config.xml" Then
changeXMLParameter(file.Path)
End If
Next
If boolRecursion Then
For Each subFolder in objFolder.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Function changeXMLParameter(fileName)
Set xmlDoc = WScript.CreateObject("Msxml2.DOMDocument")
xmlDoc.load fileName
'search single XML-Node via XPath Expression
Set node = xmlDoc.selectSingleNode("/ConfigData/parameter[name='UserEnableWebDialIE']/value")
If Not node Is Nothing Then
node.text = 0
xmlDoc.save(fileName)
End If
Set xmlDoc = Nothing
End Function
gelöste Beitrage bitte auch als solche markieren.Danke
Zitat von @AK-David:
Habe bei meinem Test nun festgestellt, dass bei einigen xml's der Name UserEnableWebDialIE inkl. Value gar nicht vorhanden
ist. Dieser müsste nun entsprechend gesetzt werden. Ist das auch möglich?
Kein Problem ...Habe bei meinem Test nun festgestellt, dass bei einigen xml's der Name UserEnableWebDialIE inkl. Value gar nicht vorhanden
ist. Dieser müsste nun entsprechend gesetzt werden. Ist das auch möglich?
ROOTFOLDER = "D:\DeinOrdner in den die Ordner liegen"
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set fldrROOT = fso.GetFolder(ROOTFOLDER)
parseFolders fldrROOT,True
Function parseFolders(objFolder,boolRecursion)
For Each file In objFolder.Files
If LCase(file.Name) = "config.xml" Then
changeXMLParameter(file.Path)
End If
Next
If boolRecursion Then
For Each subFolder in objFolder.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Function changeXMLParameter(fileName)
Set xmlDoc = WScript.CreateObject("Msxml2.DOMDocument")
xmlDoc.load fileName
'search single XML-Node via XPath Expression
Set node = xmlDoc.selectSingleNode("/ConfigData/parameter[name='UserEnableWebDialIE']/value")
If Not node Is Nothing Then
node.text = 0
Else
Set parameterNode = xmlDoc.createElement("parameter")
Set nameNode = xmlDoc.createElement("name")
nameNode.text = "UserEnableWebDialIE"
Set valueNode = xmlDoc.createElement("value")
valueNode.text = 0
parameterNode.appendChild(nameNode)
parameterNode.appendChild(valueNode)
If xmlDoc.documentElement Is Nothing Then
Set rootElement = xmlDoc.createElement("ConfigData")
xmlDoc.appendChild(rootElement)
End If
xmlDoc.documentElement.appendChild(parameterNode)
End If
xmlDoc.save(fileName)
Set xmlDoc = Nothing
End Function
danach kommt die 1 Zeile im xml-file (das zugemüse hinten hatte ich im ersten post weggeschnitten):
ist wichtig !! das nächste mal bitte mit postenNach deinen zur Verfügung gestellten Angaben, sollte das hier funktionieren:
ROOTFOLDER = "D:\DeinOrdner in den die Ordner liegen"
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set fldrROOT = fso.GetFolder(ROOTFOLDER)
parseFolders fldrROOT,True
MsgBox "Fertig!"
Function parseFolders(objFolder,boolRecursion)
For Each file In objFolder.Files
If LCase(file.Name) = "config.xml" Then
changeXMLParameter(file.Path)
End If
Next
If boolRecursion Then
For Each subFolder in objFolder.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Function changeXMLParameter(fileName)
Set xmlDoc = WScript.CreateObject("Msxml2.DOMDocument.6.0")
xmlDoc.load fileName
'search single XML-Node via XPath Expression
Set node = xmlDoc.selectSingleNode("/ConfigData/parameter[name='UserEnableWebDialIE']/value")
If Not node Is Nothing Then
node.text = 0
Else
Set parameterNode = xmlDoc.createNode(1,"parameter","http://xml.avaya.com/endpointAPI")
Set nameNode = xmlDoc.createNode(1,"name","http://xml.avaya.com/endpointAPI")
nameNode.text = "UserEnableWebDialIE"
Set valueNode = xmlDoc.createNode(1,"value","http://xml.avaya.com/endpointAPI")
valueNode.text = 0
parameterNode.appendChild(nameNode)
parameterNode.appendChild(valueNode)
If xmlDoc.documentElement Is Nothing Then
xmlDoc.loadXML("<?xml version=""1.0""?><ConfigData xmlns=""http://xml.avaya.com/endpointAPI""></ConfigData>")
End If
xmlDoc.documentElement.appendChild(parameterNode)
' Stylesheet: XML Dokument formatieren (Zeilenumbrüche hinzufügen)
Set xltDoc = CreateObject("Msxml2.DOMDocument.6.0")
xltDoc.async = False
xltDoc.loadXML( _
"<?xml version=""1.0"" encoding=""utf-8""?>" & vbNewLine & _
"<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & vbNewLine & _
" <xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes"" />" & vbNewLine & _
" <xsl:template match=""node()|@*"">" & vbNewLine & _
" <xsl:copy>" & vbNewLine & _
" <xsl:apply-templates select=""node()|@*"" />" & vbNewLine & _
" </xsl:copy>" & vbNewLine & _
" </xsl:template>" & vbNewLine & _
"</xsl:stylesheet>")
xmlDoc.transformNodeToObject xltDoc, xmlDoc
End If
xmlDoc.save(fileName)
Set xmlDoc = Nothing
End Function