Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

XML mit Datenstrukturen in Visual Basic Script einlesen.

51 views
Skip to first unread message

Tom

unread,
Jan 21, 2010, 2:48:02 PM1/21/10
to


Tom 1/21/2010 11:43 AM PST
Question
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 Visual Basic
Script einlese.
Danke.

Martin Honnen

unread,
Jan 22, 2010, 7:14:32 AM1/22/10
to
Tom wrote:

> Kann mir jemand helfen wie ich diese XML Struktur komplett in Visual Basic
> Script einlese.

Benutze MSXML, MSXML 3 ist überall vorhanden, wo mindestens IE 6
installiert ist, und seit Windows XP SP 3 ist auch MSXML 6 Teil des OS
(also auch unter Vista und Windows 7).

Beispiel für MSXML 6:

Set doc = CreateObject("Msxml2.DOMDocument.6.0")
doc.async = False
If doc.load("datei.xml") Then
'hier XPath 1.0 benutzen, um auf Knoten zuzugreifen z.B.
For Each enumX in doc.selectNodes("//EnumX")
WScript.Echo enumX.getAttribute("Name")
Next
Else
WScript.Echo doc.parseError.reason
End If

MSXML SDK ist online unter
http://msdn.microsoft.com/en-us/library/ms763742(VS.85).aspx und gibt es
auch als Download.


--

Martin Honnen --- MVP XML
http://msmvps.com/blogs/martin_honnen/

Tom

unread,
Jan 22, 2010, 10:26:05 AM1/22/10
to
Hallo Martin,
danke für deine Hilfe, dein Beispiel hat soweit funktioniert.
Allerdings will ich jetzt den Namen aller <Struct><\Struct> elemente bzw.
<EnumX><\EnumX> elemente ausgeben und zwar nur diejenigen die in der struktur
unterhalb eines bestimmten <Variable> <\Variable> elements zu finden sind.
Wie geht das?
Bzw. wie gebe ich alle gefundenen Elemente unterhalb eines <Variable>
<\Variable> elements aus die ein Name attribute haben?

"Martin Honnen" wrote:

> .
>

Martin Honnen

unread,
Jan 22, 2010, 11:18:08 AM1/22/10
to
Tom wrote:
> Hallo Martin,
> danke für deine Hilfe, dein Beispiel hat soweit funktioniert.
> Allerdings will ich jetzt den Namen aller <Struct><\Struct> elemente bzw.
> <EnumX><\EnumX> elemente ausgeben und zwar nur diejenigen die in der struktur
> unterhalb eines bestimmten <Variable> <\Variable> elements zu finden sind.
> Wie geht das?
> Bzw. wie gebe ich alle gefundenen Elemente unterhalb eines <Variable>
> <\Variable> elements aus die ein Name attribute haben?

Das Argument zu den Methoden selectNodes und selectSingleNode ist ein
XPath 1.0 Ausdruck. Du solltest dich also mit XPath 1.0 vertraut machen,
dann kannst du die Knoten, die dich interessieren, per selectNodes
und/oder selectSingleNode selektieren.
Zum Start hilft ein Tutorial wie
http://www.zvon.org/xxl/XPathTutorial/General/examples.html
aber es gibt im Web etliche Tutorials und auch viele Applikationen, in
denen man interaktiv mit XPath-Ausdrücken experimentieren kann.


So selektiert in

For Each el in doc.selectNodes("//Variable[@Name = 'A']//*[@Name]")
WScript.Echo "Element " & el.localName & " hat Name-Attributwert " &
el.getAttribute("Name")
Next

der Ausdruck //Variable[@Name = 'A'] alle "Variable"-Elemente, bei denen
das "Name"-Attribut den Wert "A" hat, und //Variable[@Name =
'A']//*[@Name] selektiert dann alle Nachfahren, die ein "Name"-Attribut
haben.

0 new messages