jl.fdez
Goto Top

XML Datei per Batch auslesen und in excel oder txt kopieren

Hallo an alle,

habe eine Frage die möglicherweise schon mal gestellt wurde.
Leider komme ich nicht weiter!?

Ich möchte in einer XML Datei bestimmte Felder auslesen und in eine Txt oder excel datei speichern.

Geht das mit Batch oder Vbs überhaupt?
Wenn ja, habt ihr einen Tipp.

hier ein einblich in die XML Datei
- <cpe-item name="cpe:/a:1024cms:1024_cms:0.7">
<title xml:lang="en-US">1024cms.org 1024 CMS 0.7</title>
<meta:item-metadata modification-date="2010-12-14T19:38:32.197Z" status="DRAFT" nvd-id="121218" />
</cpe-item>
- <cpe-item name="cpe:/a:1024cms:1024_cms:1.2.5">
<title xml:lang="en-US">1024cms.org 1024 CMS 1.2.5</title>
<meta:item-metadata modification-date="2010-12-14T19:38:32.240Z" status="DRAFT" nvd-id="121219" />

Ich bräuchte folgende Felder bzw. werte:
title --> das funktioniert mit Set "Xmltag=title" for /f "delims=>/< tokens=3" %%i in ('find "%xmltag%" %XMLDATEI%') do echo %%i
aber damit habe ich Probleme !
status
nvd-id

und sollte so aussehen
xxx.txt
"nvd-id";"title";"status"
"121218";"1024cms.org 1024 CMS 0.7";"DRAFT"
"121219";"1024cms.org 1024 CMS 1.2.5";"DRAFT"
"121214";"1024cms.org 1024 CMS 1.3.1";"DRAFT"
oder
xxx.xlsx
nvd-id title status
121218 1024cms.org 1024 CMS 0.7 DRAFT
121219 1024cms.org 1024 CMS 1.2.5 DRAFT
121214 1024cms.org 1024 CMS 1.3.1 DRAFT

kann mir einer Weiter helfen?

LG

Content-ID: 207174

Url: https://administrator.de/contentid/207174

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

colinardo
colinardo 28.05.2013, aktualisiert am 29.05.2013 um 09:07:43 Uhr
Goto Top
Hi,
also mit VBS kann ich Dir weiterhelfen. Da du aber nur einen Ausschnitt aus deinem XML-File gepostet hast habe ich das Beispiel-XML-File mal erweitert damit es mit VBS funktioniert (da im XML Namespaces verwendet werden die im VBS-Script mit angegeben werden müssen)

Beispiel XML-File mit Namespace-Prefix-Deklaration
<?xml version="1.0" encoding="utf-8"?>  
<items xmlns:meta="http://www.meinServer.de/adresse">  
<cpe-item name="cpe:/a:1024cms:1024_cms:0.7">  
	<title xml:lang="en-US">1024cms.org 1024 CMS 0.7</title>  
	<meta:item-metadata modification-date="2010-12-14T19:38:32.197Z" status="DRAFT" nvd-id="121218" />  
</cpe-item>
<cpe-item name="cpe:/a:1024cms:1024_cms:1.2.5">  
	<title xml:lang="en-US">1024cms.org 1024 CMS 1.2.5</title>  
	<meta:item-metadata modification-date="2010-12-14T19:38:32.240Z" status="DRAFT" nvd-id="121219" />  
</cpe-item>
</items>

VBS-Code zum Parsen der XML-Datei und Exportieren in eine Textdatei
Variablen in Zeile 1 und 2 sind anzupassen.
xmlFile = "D:\data.xml"  
outputTextfile = "D:\output.txt"  
Set xmlDoc = WScript.CreateObject("Msxml2.DOMDocument")  
Set fso = WScript.CreateObject("Scripting.Filesystemobject")  

xmlDoc.async = False
xmlDoc.Load xmlFile
If xmlDoc.parseError.errorCode <> 0 Then
	WScript.Echo xmlDoc.parseError.reason
	WScript.Quit 1
End If
xmlDoc.setProperty "SelectionLanguage", "XPath"  
xmlDoc.setProperty "SelectionNamespaces", "xmlns:meta='http://www.meinServer.de/adresse'"  

Set f = fso.OpenTextFile(outputTextfile, 2, True)
'Schreibe Text-Headers  
f.WriteLine(Chr(34) & "nvdid" & Chr(34) & ";" & Chr(34) & "title" & chr(34) & ";" & Chr(34) & "status" & Chr(34))  

Set oDoc = xmlDoc.documentElement
Set xmlCPEItems = oDoc.getElementsByTagName("cpe-item")  
If xmlCPEItems.length > 0 Then
	For Each el In xmlCPEItems
		title = el.selectSingleNode("title").text  
		status = el.selectSingleNode("meta:item-metadata").attributes.getNamedItem("status").text  
		nvdid = el.selectSingleNode("meta:item-metadata").attributes.getNamedItem("nvd-id").text  
		f.WriteLine(Chr(34) & nvdid & Chr(34) & ";" & Chr(34) & title & chr(34) & ";" & Chr(34) & status & Chr(34))  
	Next
End If
f.Close
Set xmlDoc = Nothing
Am besten du postest mal den Anfang der XML-Datei in dem die Namespace-Deklarationen vermerkt sein sollten dann passe ich Dir den Code an.

Bitte verwende Tags wenn du Code postest damit dieser nicht "verhunzt" wird. (Siehe FAQ)

Grüße Uwe
Endoro
Endoro 28.05.2013, aktualisiert am 29.05.2013 um 00:39:12 Uhr
Goto Top
Hallo JL.Fdez,

Mit pure batch sieht es so aus:
@echo off&setlocal
set "outfile=out.csv"  

set "tfile=%temp%\%random%.tmp"  
(for /f tokens^=3^,4^,6delims^=^<^>^" %%i in ('findstr "title meta" file') do (  
	if "%%k"=="" (<nul set/p"=%%i:") else echo(%%j:%%k  
))>"%tfile%"  
(for /f "usebackq tokens=1-3 delims=:" %%i in ("%tfile%") do echo("%%k","%%i","%%j")>"%outfile%"  
del "%tfile%"  
type "%outfile%"  

Gruss!