Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Eine xml Datei per Script anpassen

Frage Entwicklung Batch & Shell

Mitglied: AK-David

AK-David (Level 1) - Jetzt verbinden

16.07.2013 um 11:43 Uhr, 1913 Aufrufe, 12 Kommentare

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).


01.
<?xml version="1.0"?> 
02.
<ConfigData> 
03.
<version>1</version> 
04.
<parameter> 
05.
<name>CurrentSkin</name> 
06.
<value>1</value> 
07.
</parameter> 
08.
<parameter> 
09.
<name>UserPreferredLanguage</name> 
10.
<value>English</value> 
11.
</parameter> 
12.
<parameter> 
13.
<name>LanguageInUse</name> 
14.
<value>English</value> 
15.
</parameter> 
16.
<parameter> 
17.
<name>OwnIPAddress</name> 
18.
<value>127.0.0.1</value> 
19.
</parameter> 
20.
<parameter> 
21.
<name>ReUseIPAddress</name> 
22.
<value>127.0.0.1</value> 
23.
</parameter> 
24.
<parameter> 
25.
<name>Layer2PriorityForAudio</name> 
26.
<value>-1</value> 
27.
</parameter> 
28.
<parameter> 
29.
<name>SipProxyServerList</name> 
30.
<value>127.0.0.1</value> 
31.
</parameter> 
32.
<parameter> 
33.
<name>DialPlanCountryCode</name> 
34.
<value>41</value> 
35.
</parameter> 
36.
<parameter> 
37.
<name>DialPlanInternationalAccessCode</name> 
38.
<value>00</value> 
39.
</parameter> 
40.
<parameter> 
41.
<name>DialPlanLongDistanceAccessCode</name> 
42.
<value></value> 
43.
</parameter> 
44.
<parameter> 
45.
<name>DialPlanOutsideLineAccessCode</name> 
46.
<value>0</value> 
47.
</parameter> 
48.
<parameter> 
49.
<name>RtpPortLow</name> 
50.
<value>2048</value> 
51.
</parameter> 
52.
<parameter> 
53.
<name>RtpPortRange</name> 
54.
<value>1281</value> 
55.
</parameter> 
56.
<parameter> 
57.
<name>SipUserAccount</name> 
58.
<value>322</value> 
59.
</parameter> 
60.
<parameter> 
61.
<name>SipUserId</name> 
62.
<value>322</value> 
63.
</parameter> 
64.
<parameter> 
65.
<name>SipUserPassword</name> 
66.
<value></value> 
67.
</parameter> 
68.
<parameter> 
69.
<name>PrevSipUserAccount</name> 
70.
<value>322</value> 
71.
</parameter> 
72.
<parameter> 
73.
<name>SignalProtocol</name> 
74.
<value>1</value> 
75.
</parameter> 
76.
<parameter> 
77.
<name>UserEnableVideo</name> 
78.
<value>0</value> 
79.
</parameter> 
80.
<parameter> 
81.
<name>AudioDeviceList</name> 
82.
<value><AudioDeviceList> 
83.
<RingViaSecondDevice>true</RingViaSecondDevice> 
84.
<RingingDeviceEnabled>false</RingingDeviceEnabled> 
85.
<playback> 
86.
<device> 
87.
<guid>{0.0.0.00000000}.{046e54cb-01f5-45b7-83d9-d29115765493}</guid> 
88.
<name>Lautsprecher (Realtek High Definition Audio)</name> 
89.
<volume>50</volume> 
90.
<state>true</state> 
91.
<available>true</available> 
92.
</device> 
93.
<device> 
94.
<guid>{0.0.0.00000000}.{28a667b6-c080-4f5c-9442-c166aed12c9d}</guid> 
95.
<name>Lautsprecher (High Definition Audio-Gerät)</name> 
96.
<volume>50</volume> 
97.
<state>false</state> 
98.
<available>false</available> 
99.
</device> 
100.
</playback> 
101.
<microphone> 
102.
<device> 
103.
<guid>{0.0.1.00000000}.{327e7f46-255b-42fc-9c4e-60d0b98d6e84}</guid> 
104.
<name>Mikrofon (Realtek High Definition Audio)</name> 
105.
<volume>50</volume> 
106.
<state>true</state> 
107.
<available>true</available> 
108.
</device> 
109.
<device> 
110.
<guid>{0.0.1.00000000}.{4eeee7ea-f4ba-4ade-b4f3-fe26f3b3d3aa}</guid> 
111.
<name>Mikrofon (High Definition Audio-Gerät)</name> 
112.
<volume>50</volume> 
113.
<state>false</state> 
114.
<available>false</available> 
115.
</device> 
116.
</microphone> 
117.
<ringer> 
118.
<device> 
119.
<guid>{0.0.0.00000000}.{28a667b6-c080-4f5c-9442-c166aed12c9d}</guid> 
120.
<name>Lautsprecher (High Definition Audio-Gerät)</name> 
121.
<volume>50</volume> 
122.
<state>false</state> 
123.
<available>false</available> 
124.
</device> 
125.
<device> 
126.
<guid>{0.0.0.00000000}.{046e54cb-01f5-45b7-83d9-d29115765493}</guid> 
127.
<name>Lautsprecher (Realtek High Definition Audio)</name> 
128.
<volume>50</volume> 
129.
<state>true</state> 
130.
<available>true</available> 
131.
</device> 
132.
</ringer> 
133.
</AudioDeviceList> 
134.
</value> 
135.
</parameter> 
136.
<parameter> 
137.
<name>LoginMode</name> 
138.
<value>2</value> 
139.
</parameter> 
140.
<parameter> 
141.
<name>DialPlanAreaCode</name> 
142.
<value>032</value> 
143.
</parameter> 
144.
<parameter> 
145.
<name>DialPlanLocalCallPrefix</name> 
146.
<value>032</value> 
147.
</parameter> 
148.
<parameter> 
149.
<name>DialPlanExtensionLengthList</name> 
150.
<value>3</value> 
151.
</parameter> 
152.
<parameter> 
153.
<name>DialPlanPBXPrefix</name> 
154.
<value>6862</value> 
155.
</parameter> 
156.
<parameter> 
157.
<name>MaxC2DDialableLength</name> 
158.
<value>12</value> 
159.
</parameter> 
160.
<parameter> 
161.
<name>BlockEmergencyCall</name> 
162.
<value>1</value> 
163.
</parameter> 
164.
<parameter> 
165.
<name>AlternateGKAddressList</name> 
166.
<value>127.0.0.1</value> 
167.
</parameter> 
168.
<parameter> 
169.
<name>VideoRtpPortLow</name> 
170.
<value>2688</value> 
171.
</parameter> 
172.
<parameter> 
173.
<name>VideoRtpPortRange</name> 
174.
<value>640</value> 
175.
</parameter> 
176.
<parameter> 
177.
<name>UserEnableWebDialIE</name> 
178.
<value>0</value> 
179.
</parameter> 
180.
<parameter> 
181.
<name>UserEnableWebDialFirefox</name> 
182.
<value>0</value> 
183.
</parameter> 
184.
<parameter> 
185.
<name>MicrosoftOutlookContacts</name> 
186.
<value>1</value> 
187.
</parameter> 
188.
<parameter> 
189.
<name>AvayaSearchDirectory</name> 
190.
<value>1</value> 
191.
</parameter> 
192.
</ConfigData>
Mitglied: Endoro
16.07.2013 um 14:27 Uhr
Hallo,

dieses Skript brauchst du nur an deine Ordnerstruktur anzupassen.
01.
@echo OFF &SETLOCAL 
02.
SET "value=<value>0</value>" 
03.
SET "fxml=file.xml" 
04.
SET "fnew=file.new" 
05.
 
06.
FOR /f "delims=:" %%a  IN ('findstr /n "UserEnableWebDialIE" "%fxml%"') DO SET "sline=%%a" 
07.
SETLOCAL ENABLEDELAYEDEXPANSION 
08.
< "%fxml%" ( 
09.
FOR /l %%a IN (1,1,%sline%) DO ( 
10.
SET "line=" 
11.
SET /p "line=" 
12.
ECHO(!line! 
13.
14.
ECHO(!value!)>"%fnew%" 
15.
ENDLOCAL 
16.
SET /a sline+=1 
17.
<"%fxml%" MORE +%sline% >>"%fnew%" 
18.
TYPE "%fnew%"
lg
Bitte warten ..
Mitglied: colinardo
16.07.2013, aktualisiert um 16:15 Uhr
Hallo AK-David,
wenn's VBScript sein darf:
(Zeile 1 noch den Ordner angeben in dem jeweiligen Ordner liegen)
01.
ROOTFOLDER = "D:\DeinOrdner in den die Ordner liegen" 
02.
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 
03.
Set fldrROOT = fso.GetFolder(ROOTFOLDER) 
04.
parseFolders fldrROOT,True 
05.
 
06.
Function parseFolders(objFolder,boolRecursion) 
07.
	For Each file In objFolder.Files 
08.
		If LCase(file.Name) = "config.xml" Then 
09.
			changeXMLParameter(file.Path) 
10.
		End If 
11.
	Next 
12.
	 
13.
	If boolRecursion Then 
14.
		For Each subFolder in objFolder.SubFolders 
15.
			parseFolders subFolder, True 
16.
		Next 
17.
	End If 
18.
End Function 
19.
 
20.
Function changeXMLParameter(fileName) 
21.
	Set xmlDoc = WScript.CreateObject("Msxml2.DOMDocument") 
22.
	xmlDoc.load fileName 
23.
	'search single XML-Node via XPath Expression 
24.
	Set node = xmlDoc.selectSingleNode("/ConfigData/parameter[name='UserEnableWebDialIE']/value") 
25.
	If Not node Is Nothing Then 
26.
		node.text = 0 
27.
                xmlDoc.save(fileName) 
28.
	End If 
29.
	Set xmlDoc = Nothing 
30.
End Function 
31.
 
Grüße Uwe
gelöste Beitrage bitte auch als solche markieren.Danke
Bitte warten ..
Mitglied: AK-David
16.07.2013 um 15:11 Uhr
Danke Endoro und colinardo für die schnellen Antworten

Das erste Skript von Endoro kriege ich nicht zum laufen.Er findet die gesuchte Datei nicht. Muss wohl noch erwähnen, Programmier-technisch, Batch-mässig bin ich nach wie vor Noob und verstehe nicht wirklich alles. Weiss auch nicht genau, wo da der Pfad rein soll, wobei das ja wieder Ordernabhängig ist, bzw. habe ja x Ordner mit der Selben Unter-Ordner-Struktur

Die zweite Variante von Colinardo läuft soweit sehr gut. musste die 1 von Zeile 26 auf einen 0 ändern, das ist der Wert, den ich am Ende in der xml haben möchte.

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?
Bitte warten ..
Mitglied: colinardo
16.07.2013, aktualisiert um 17:13 Uhr
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 ...
01.
ROOTFOLDER = "D:\DeinOrdner in den die Ordner liegen" 
02.
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 
03.
Set fldrROOT = fso.GetFolder(ROOTFOLDER) 
04.
parseFolders fldrROOT,True 
05.
 
06.
Function parseFolders(objFolder,boolRecursion) 
07.
	For Each file In objFolder.Files 
08.
		If LCase(file.Name) = "config.xml" Then 
09.
			changeXMLParameter(file.Path) 
10.
		End If 
11.
	Next 
12.
	 
13.
	If boolRecursion Then 
14.
		For Each subFolder in objFolder.SubFolders 
15.
			parseFolders subFolder, True 
16.
		Next 
17.
	End If 
18.
End Function 
19.
 
20.
Function changeXMLParameter(fileName) 
21.
	Set xmlDoc = WScript.CreateObject("Msxml2.DOMDocument") 
22.
	xmlDoc.load fileName 
23.
	'search single XML-Node via XPath Expression 
24.
	Set node = xmlDoc.selectSingleNode("/ConfigData/parameter[name='UserEnableWebDialIE']/value") 
25.
	If Not node Is Nothing Then 
26.
		node.text = 0 
27.
	Else 
28.
		Set parameterNode = xmlDoc.createElement("parameter") 
29.
		Set nameNode = xmlDoc.createElement("name") 
30.
		nameNode.text = "UserEnableWebDialIE" 
31.
		Set valueNode = xmlDoc.createElement("value") 
32.
		valueNode.text = 0 
33.
		parameterNode.appendChild(nameNode) 
34.
		parameterNode.appendChild(valueNode) 
35.
                If xmlDoc.documentElement Is Nothing Then 
36.
			Set rootElement = xmlDoc.createElement("ConfigData") 
37.
			xmlDoc.appendChild(rootElement) 
38.
		End If 
39.
		xmlDoc.documentElement.appendChild(parameterNode) 
40.
	End If 
41.
	xmlDoc.save(fileName) 
42.
	Set xmlDoc = Nothing 
43.
End Function
Uwe
Bitte warten ..
Mitglied: AK-David
16.07.2013 um 16:57 Uhr
Hi Uwe

Danke für die Ergänzung.

In Zeile 35 erhalte ich die Fehlermeldung "Objekt erforderlich: "xmlDoc.documentElement", Code 800A01A8.

Weisst du da was?
Bitte warten ..
Mitglied: colinardo
16.07.2013, aktualisiert um 17:05 Uhr
fehlt in einer deiner XML-Dateien eventuell das ROOT-Element <ConfigData> ? Überprüfe das mal...
Das kann auch vorkommen wenn ein XML-File nicht standardkonform ist oder ungültige Zeichen enthält.
Bitte warten ..
Mitglied: colinardo
16.07.2013 um 17:14 Uhr
Habe für den Fall das das ROOT-Element <ConfigData> nicht existiert den Code oben auf diese Situation angepasst...
Bitte warten ..
Mitglied: AK-David
16.07.2013 um 17:24 Uhr
Ja, genau, war ne leere xml Datei.

hmm

allerdings wird die neue Zeile komisch eingefügt:

01.
<parameter xmlns=""><value>0</value><name>UserEnableWebDialIE</name></parameter></ConfigData>
Damit kann das Programm allerding nichts anfangen. müsste ja in etwa so aussehen:

01.
<parameter> 
02.
<name>UserEnableWebDialIE</name> 
03.
<value>0</value> 
04.
</parameter> 
05.
</ConfigData>
Bitte warten ..
Mitglied: colinardo
16.07.2013 um 17:28 Uhr
poste mal den XML Header der Datei, da scheint ein XML-Namespace enthalten zu sein ...
eine normale leere XML-Datei sieht ja so aus:
01.
<?xml version="1.0" encoding="utf-8"?>
Bitte warten ..
Mitglied: AK-David
16.07.2013 um 17:43 Uhr
ich hoffe das ist das richtige:

01.
<?xml version="1.0"?>
danach kommt die 1 Zeile im xml-file (das zugemüse hinten hatte ich im ersten post weggeschnitten):
01.
<ConfigData xmlns="http://xml.avaya.com/endpointAPI">
Bitte warten ..
Mitglied: colinardo
16.07.2013, aktualisiert um 18:40 Uhr
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 posten

Nach deinen zur Verfügung gestellten Angaben, sollte das hier funktionieren:
01.
ROOTFOLDER = "D:\DeinOrdner in den die Ordner liegen" 
02.
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 
03.
Set fldrROOT = fso.GetFolder(ROOTFOLDER) 
04.
parseFolders fldrROOT,True 
05.
MsgBox "Fertig!" 
06.
Function parseFolders(objFolder,boolRecursion) 
07.
	For Each file In objFolder.Files 
08.
		If LCase(file.Name) = "config.xml" Then 
09.
			changeXMLParameter(file.Path) 
10.
		End If 
11.
	Next 
12.
	 
13.
	If boolRecursion Then 
14.
		For Each subFolder in objFolder.SubFolders 
15.
			parseFolders subFolder, True 
16.
		Next 
17.
	End If 
18.
End Function 
19.
 
20.
Function changeXMLParameter(fileName) 
21.
	Set xmlDoc = WScript.CreateObject("Msxml2.DOMDocument.6.0") 
22.
	xmlDoc.load fileName 
23.
	'search single XML-Node via XPath Expression 
24.
	Set node = xmlDoc.selectSingleNode("/ConfigData/parameter[name='UserEnableWebDialIE']/value") 
25.
	If Not node Is Nothing Then 
26.
		node.text = 0 
27.
	Else 
28.
		Set parameterNode = xmlDoc.createNode(1,"parameter","http://xml.avaya.com/endpointAPI") 
29.
		Set nameNode = xmlDoc.createNode(1,"name","http://xml.avaya.com/endpointAPI") 
30.
		nameNode.text = "UserEnableWebDialIE" 
31.
		Set valueNode = xmlDoc.createNode(1,"value","http://xml.avaya.com/endpointAPI") 
32.
		valueNode.text = 0 
33.
		parameterNode.appendChild(nameNode) 
34.
		parameterNode.appendChild(valueNode) 
35.
		If xmlDoc.documentElement Is Nothing Then 
36.
			xmlDoc.loadXML("<?xml version=""1.0""?><ConfigData xmlns=""http://xml.avaya.com/endpointAPI""></ConfigData>") 
37.
		End If 
38.
		xmlDoc.documentElement.appendChild(parameterNode) 
39.
		 
40.
		' Stylesheet: XML Dokument formatieren (Zeilenumbrüche hinzufügen) 
41.
		Set xltDoc = CreateObject("Msxml2.DOMDocument.6.0") 
42.
		xltDoc.async = False 
43.
		xltDoc.loadXML( _ 
44.
		  "<?xml version=""1.0"" encoding=""utf-8""?>" & vbNewLine & _ 
45.
		  "<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & vbNewLine & _ 
46.
		  "	<xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes"" />" & vbNewLine & _ 
47.
		  "	<xsl:template match=""node()|@*"">" & vbNewLine & _ 
48.
		  "		<xsl:copy>" & vbNewLine & _ 
49.
		  "			<xsl:apply-templates select=""node()|@*"" />" & vbNewLine & _ 
50.
		  "		</xsl:copy>" & vbNewLine & _ 
51.
		  "	</xsl:template>" & vbNewLine & _ 
52.
		  "</xsl:stylesheet>") 
53.
		xmlDoc.transformNodeToObject xltDoc, xmlDoc 
54.
	End If 
55.
	xmlDoc.save(fileName) 
56.
	Set xmlDoc = Nothing 
57.
End Function
Bitte warten ..
Mitglied: AK-David
17.07.2013 um 10:34 Uhr
Hallo uwe

Sorry, war mir nicht bewusst, hab aber daraus auf jeden Fall gelernt. Danke.

Ja, das Skript läuft nun einwandfrei durch und das Programm verarbeitet die xml ohne Probleme.

Vielen lieben Dank für deine Geduld und deine Arbeit.

Grüsse

David
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Script zum XML Datei Umschreiben (12)

Frage von cberndt zum Thema Batch & Shell ...

XML
XML Datei Fehler? (1)

Frage von Patrick-IT zum Thema XML ...

PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Windows Server
Windows Bereitstellungsdienst und .xml-Datei erstellen (1)

Frage von 131275 zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (19)

Frage von patz223 zum Thema Windows Userverwaltung ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (15)

Link von Penny.Cilin zum Thema Viren und Trojaner ...