XML mit Datenstrukturen in VBS einlesen.

21/01/2010 - 20:44 von Tom | Report spam
Ich habe folgendes XML file, das Datenstrukturen beschreibt:
<IFD>
<CID>
<Block Name="Block">
<Group Name="Group">
<Variable BlockNumber="1" Name="A" Description="Text" Locate_ProcA="True"
NonVolatile_ProcA="True" ReadAccessRef="a" WriteAccessRef="b"
WInPMode="False" WInLMode="False" WInNMode="False" WInCMode="True"
WInUMode1="False" WInUMode2="False">
<Struct>
<Struct Name="DName" Description="Text">
<BasicType Name="Content">
<String Length="8" FixedLength="True" DefaultValue="A"
ProcessAsciiText="True"/>
</BasicType>
</Struct>
<Struct Name="Struct" Description="Text">
<BasicType Name="Content">
<XByte>
<EnumX Name="A" Width="1" Description="D" DefaultValue="0">
<Choice Name="a" PreAllocation="0" Description="D"/>
<Choice Name="b" PreAllocation="1" Description="D"/>
</EnumX>
<UIntX Name="B" Width="7"/>
<EnumX Name="C" Width="8" Description="D" DefaultValue="7">
<Choice Name="a" PreAllocation="1" Description="a"/>
<Choice Name="b" PreAllocation="2" Description="b"/>
<Choice Name="c" PreAllocation="3" Description="c"/>
<Choice Name="d" PreAllocation="4" Description="d"/>
<Choice Name="e" PreAllocation="5" Description="e"/>
</EnumX>
<EnumX Name="D" Width="4" Description="D" DefaultValue="4">
<Choice Name="a" PreAllocation="1" Description="D"/>
<Choice Name="b" PreAllocation="2" Description="D"/>
</EnumX>
<Bool Name="E" Description="D" DefaultValue="False"/>
<Bool Name="F" Description="E" DefaultValue="True"/>
<UIntX Name="G" Width="10"/>
<UIntX Name="Time" Width="16" Description="D" DefaultValue="120"
PhysicalUnit="s"/>
<UIntX Name="H" Width="10"/>
<EnumX Name="I" Width="1" Description="D" DefaultValue="0">
<Choice Name="a" PreAllocation="0" Description="D"/>
<Choice Name="b" PreAllocation="1" Description="D"/>
</EnumX>
</XByte>
</BasicType>
</Struct>
<Struct Name="Struct" Description="Text">
<BasicType Name="Content">
<String Length="22" FixedLength="True" DefaultValue="Default"
ProcessAsciiText="True"/>
</BasicType>
</Struct>
</Struct>
</Variable>
<Variable BlockNumber="2" Name="B" Description="D" Locate_ProcA="True"
NonVolatile_ProcA="False" ReadAccessRef="b">
<Struct>
<Struct Name="Name" Description="x">
<BasicType Name="Content">
<XByte>
<UIntX Name="A" Width="3" Description="a" DefaultValue="0"/>
<UIntX Name="B" Width="1" Description="b" DefaultValue="0"/>
</XByte>
</BasicType>
</Struct>
</Struct>
</Variable>
</Group Name>
</Block Name>
</IFD>
</CID>

Dieses XML file möchte ich komplett in einem VBS Script einlesen. Auf die
einzelnen XML Elemente und deren Werte soll zugegriffen werden.

Kann mir jemand helfen wie ich diese XML Struktur komplett in VBS einlese.
Danke.
 

Lesen sie die antworten

#1 ekkehard.horner
21/01/2010 - 22:53 | Warnen spam
Tom schrieb:
Ich habe folgendes XML file, das Datenstrukturen beschreibt:
<IFD>
<CID>
<Block Name="Block">
<Group Name="Group">


[...]
</Group Name> <-
</Block Name> <-
</IFD> <-
</CID> <-

Dieses XML file möchte ich komplett in einem VBS Script einlesen. Auf die
einzelnen XML Elemente und deren Werte soll zugegriffen werden.

Kann mir jemand helfen wie ich diese XML Struktur komplett in VBS einlese.
Danke.



Wenn man die markierten Zeile korrigiert und folgendes Script

Dim sFSpec : sFSpec = resolvePath( "..\testdata\xml\tom.xml" )
Dim oXDoc : Set oXDoc = CreateObject( "Msxml2.DOMDocument" )
oXDoc.setProperty "SelectionLanguage", "XPath"
oXDoc.async = False
oXDoc.load sFSpec

If 0 = oXDoc.ParseError Then
WScript.Echo sFSpec, "looks ok"
Dim sXPath, ndFnd, ndlFnd

sXPath = "/IFD/CID/Block/Group/Variable[@BlockNumber=""2""]"
Set ndFnd = oXDoc.selectSingleNode( sXPath )
If ndFnd Is Nothing Then
WScript.Echo "|", sXPath, "| not found"
Else
WScript.Echo "found |" & ndFnd.getAttributeNode( "Name" ).value & "|"
End If

sXPath = "/IFD/CID/Block/Group/Variable[@BlockNumber=""3""]"
Set ndFnd = oXDoc.selectSingleNode( sXPath )
If ndFnd Is Nothing Then WScript.Echo "|", sXPath, "| not found"

sXPath = "//Choice"
Set ndlFnd = oXDoc.selectNodes( sXPath )
If ndlFnd Is Nothing Then
WScript.Echo "|", sXPath, "| not found"
Else
WScript.Echo "found", ndlFnd.length, sXPath
For Each ndFnd In ndlFnd
WScript.Echo ndFnd.xml
Next
End If

Else
WScript.Echo oXDoc.ParseError.Reason
End If

erhaelt man

DemoTom - demo
-
M:\lib\kurs0705\testdata\xml\tom.xml looks ok
found |B|
| /IFD/CID/Block/Group/Variable[@BlockNumber="3"] | not found
found 11 //Choice
<Choice Name="a" PreAllocation="0" Description="D"/>
<Choice Name="b" PreAllocation="1" Description="D"/>
<Choice Name="a" PreAllocation="1" Description="a"/>
<Choice Name="b" PreAllocation="2" Description="b"/>
<Choice Name="c" PreAllocation="3" Description="c"/>
<Choice Name="d" PreAllocation="4" Description="d"/>
<Choice Name="e" PreAllocation="5" Description="e"/>
<Choice Name="a" PreAllocation="1" Description="D"/>
<Choice Name="b" PreAllocation="2" Description="D"/>
<Choice Name="a" PreAllocation="0" Description="D"/>
<Choice Name="b" PreAllocation="1" Description="D"/>
xplxml.vbs: Erfolgreich beendet. (0) [ 0,04688 secs ]

Dann muss man sich nur irgendwie Zugriff auf die Microsoft XML Core
Services (MSXML) Dokumentation verschaffen (Fuer 4.0 war eine .chm
im SDK Download; die MS IDEs moegen sie enthalten) und kann beginnen,
sich zu ueberlegen, was "Auf die einzelnen XML Elemente und deren Werte
soll zugegriffen werden" genau bedeuten soll.

Ähnliche fragen