ironheadMedlem sedan mars 20011 346 inlägg Har en XML-fil som ser ut såhär:
filelist.xml:
----------------------------------------------------------
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
<o:MainFile HRef="../chapter_1.html"/>
<o:File HRef="header.htm"/>
<o:File HRef="image001.png"/>
<o:File HRef="filelist.xml"/>
</xml>
----------------------------------------------------------
...och en vb-kod som ser ut såhär:
Dim xDoc As MSXML.DOMDocument
Set xDoc = New MSXML.DOMDocument
Dim objLst As Object
If xDoc.Load("d:\file.xml") Then
Set objLst = xDoc.getElementsByTagName("o:File")
For i = 0 To objLst.length - 1
'Här vill jag lista elementen
Next
...men jag vet inte hur jag visar värdet på objLst i for-satsen...hur skriver man?
nikoMedlem sedan juni 20022 599 inlägg Dim xDoc As MSXML2.DOMDocument
Set xDoc = New MSXML2.DOMDocument
Dim objLst As MSXML2.IXMLDOMNodeList
xDoc.async = False
xDoc.Load ("d:\filelist.xml")
If xDoc.parseError.errorCode = 0 Then
Set objLst = xDoc.getElementsByTagName("o:File")
For i = 0 To objLst.length - 1
MsgBox objLst.Item(i).Attributes.getNamedItem("HRef").nodeValue
'Här vill jag lista elementen
Next
Else
MsgBox xDoc.parseError.reason
End If
ironheadMedlem sedan mars 20011 346 inlägg Tackar! Funkade ju kanon! :)
ironheadMedlem sedan mars 20011 346 inlägg Nu har jag en ny XML-fil som ser ut såhär:
<?xml version="1.0" encoding="iso-8859-1"?>
<export>
<databas name="databas1">
<tabell name="paket">
<fields>
<socker>blah1</socker>
<grädde>blah</grädde>
<mjölk>blah3</mjölk>
<mjöl>blah4</mjöl>
<vaniljsocker>blah5</vaniljsocker>
</fields>
</tabell>
<tabell name="paket2">
<fields>
<skinka>blah1<skinka>
<lök>blah2<lök>
<margarin>blah3<margarin>
<cocos>blah4<cocos>
<farinsocker>blah5<farinsocker>
</fields>
</tabell>
</databas>
</export>
Kan man använda en liknande metod för att läsa av värdena och lägga in dessa till en SQL-server genom VB?!
nikoMedlem sedan juni 20022 599 inlägg Ja? Självklart kan man nysta ut data ur vilket XML-dokument som helst med de metoder som finns i MSXML. Hur koden sen ser ut blir ju en funktion av vad man mer exakt vill göra.
ironheadMedlem sedan mars 20011 346 inlägg Använde detta för att få ut värdena i subelementen:
Set objLst = xDoc.getElementsByTagName("tabell")
For i = 0 To objLst.length - 1
MsgBox objLst.Item(i).selectSingleNode("fields").Text
Next
...men vad använder jag för att få ut själva sub-elementet?
nu har jag värdet för fältet, men vill ju ha ut fältnamnet oxå....
nikoMedlem sedan juni 20022 599 inlägg Easier than you think:
Set objLst = xDoc.getElementsByTagName("tabell")
Dim myNode As MSXML2.IXMLDOMNode
For i = 0 To objLst.length - 1
MsgBox "Tabell: " & objLst.Item(i).Attributes.getNamedItem("name").nodeValue
For Each myNode In objLst.Item(i).selectSingleNode("fields").childNodes
MsgBox "Namn: " & myNode.nodeName & ", Värde: " & myNode.Text
Next
Next
ironheadMedlem sedan mars 20011 346 inlägg Absolut lysande! :birp
Tackar!