Jag behöver extrahera ut data från ett xml-dokument. Jag tror du kan använda dig av en liknande lösning jag skrev i asp.net för språkstöd. Jag laddar in filen i minnet och söker ur den. Kolla på www.pellesoft.se/informator Jag fattar inte detta riktigt. Jag har nu hittat hur man ser om ett element har attribut. Kanske följande lilla program kan hjälpa dig. >Dim dom As New MSXML2.DOMDocument40 >Rad ett deklarerar en variabel av typen MSXML2.DOMDocument40 samt skapar en instans av typen Vad är det du egentligen vill göra? Vad ska du göra med dessa arrayer? Helt rätt. Varför spelar teckenupsättningen någon roll? I den data som jag har i min sql-databas står det exvis Här står hur det fungerar: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnxml/html/xmlencodings.asp Detta kanske borde vara en ny tråd i forumet.MSXML
XML-dokumentet ligger i ett fält i en tabell i en sql-server, dvs xml-dokumentet kommer att finnas i en variabel efter det att jag hämtat datat i sql-servern.
Jag vill ha ut datat i visst/vissa xml-element.
Jag antar att jag ska använda msxml3.dll
(jag kör access 2000).
Någon som har exempel/kod för hur jag tar ut xml-elementens data?
Dvs hur jag hanterar msxml.dll i access 2k.
Xml-datat ligger med flera nivåer, och ev med attribut i start-taggarna,
dvs ganska komplexa xml-dokument.
/ Mikael
Ska försöka förtydliga mig lite.
Jag vill i en array lagra hela xml-datat.
XML-datat finns i en variabel.
Jag vill loopa igenom alla taggar, och lägga alla taggar med data i arrayen.
Detta för att senare kunna hämta data ur arrayen för vidare behandling.
Mao söker jag koden i VB (access2k) för att loopa igenom ett xml-dokument (ligger i en variabel), och lägga alla taggar i en kolumn i arrayen, och alla data i nästa kolumn.
Blev det mer lättförståligt?
Det jag behöver är antagligen lite info om hur msxml.dll fungerar.
/ Mikael Sv: MSXML
Sv: MSXML
Jag vet alltså inte vilka taggar/element som finns i xmldoc.
(Jag kan därför inte söka efter visst element, och hämta dess värde).
Men jag vill ha ut alla taggar inkl attribut och elementdata i en array.
Förslagsvis en array med tre kolumner.
a: Element
b: Elementdata
c: Attribut
(Kanske inte rätt benämningar på delarna)
ex:
<kund foretag="AB1">
<kontakter>
<kont>
<namn>Sture</namn>
<tel>08-1234567898</tel>
</kont>
<kont>
<namn>Stina</namn>
<tel>031-123456</tel>
</kont>
</kontakter>
</kund>
Skall ge följande i arrayen
1a: "/kund/kontakter/kont1/namn"
1b: "Sture"
1c: "foretag=AB1"
2a: "/kund/kontakter/kont1/tel"
2b: "08-123456789"
2c: "foretag=AB1"
3a: "/kund/kontakter/kont2/namn"
3b: "Stina"
3c: "foretag=AB1"
4a: "/kund/kontakter/kont2/tel"
4b: "031-123456"
4c: "foretag=AB1"
Är jag helt ute och snurrar?
Det handlar alltså om datautbyte mellan två system. (har inte alls med websidor/weblayout att göra).
Jag vill ta ut allt data ur ett xmldokument, för vidare bearbetning.
Min idé bygger på att lägga all data i en array, någon som har en bättre idé?
Jag kan direkt se en brist i mitt exempel ovan.
Om taggen tel skulle ha ett attribut som är "typ", skulle mitt förslag inte fungera.
Dvs <tel typ="mobil">031-123456</tel>
/ MikaelSv: MSXML
Även hittat hur man hämtar datat för ett visst attribut.
MEN, finns det något sätt att se VILKA attribut som ett element ev har?
/ MikaelSv: MSXML
<code>
Sub PrintElement(ByVal prefix As String, ByVal root As IXMLDOMNode)
Dim attr As IXMLDOMNode, node As IXMLDOMNode
For Each node In root.childNodes
Select Case node.nodeType
Case NODE_ELEMENT
Debug.Print "Element: " & prefix & node.nodeName
For Each attr In node.Attributes
Debug.Print "attr: " & attr.nodeName & "=" & attr.nodeValue
Next
PrintElement prefix & node.nodeName & "/", node
Case NODE_TEXT
Debug.Print "Text: " & node.nodeValue
End Select
Next
End Sub
Sub Import()
Dim dom As New MSXML2.DOMDocument40
Set dom = New MSXML2.DOMDocument40 ' vet inte riktigt varför denna rad behövs
dom.async = False
dom.validateOnParse = False
dom.resolveExternals = False
dom.preserveWhiteSpace = True
dom.loadXML variabelMedXML
PrintElement "", dom.documentElement
End Sub
</code>Sv: MSXML
>Set dom = New MSXML2.DOMDocument40 ' vet inte riktigt varför denna rad behövs
Rad ett deklarerar en variabel av typen MSXML2.DOMDocument40 samt skapar en instans av typen MSXML2.DOMDocument40.
Rad två "skriver över" innehållet i variabeln med en ny instans av typen MSXML2.DOMDocument40.
Förslagsvis tar du bort nyckelordet New på första raden så att du bara deklarerar där. Det är rätt bra att inte skapa objekt på samma rad som deklarationen då det är enklare att felsöka med t.ex. vs.net eller liknande.Sv: MSXML
>MSXML2.DOMDocument40.
>Rad två "skriver över" innehållet i variabeln med en ny instans av typen MSXML2.DOMDocument40.
Det var vad jag trodde men det konstiga är att jag ibland (?) får felmeddelande "object does not exist" på nästa rad om jag inte har rad2.Sv: MSXML
Jag tror du vill ha det till arrayer bara för att du förstår arrayer lite bättre än vad du förstår DOM
(Document Object Model). Kan det stämma? :)
Lär dig det i stället, så kommer du snart glömma dina gamla arrayer..
OlaSv: MSXML
Arrayen tillkom pga bristande kunskap om DOM.
Nu har det hela klarnat en del.
Arrayen är borta.
Jag har nu nästa problem att hantera.
Den XML jag skall läsa ligger som text i en tabell i en SQL-server.
Den är med teckenuppsättning UTF-8.
Jag vill ha ut datat ur elementen i ISO 8859-1.
Någon som har kod eller likn för att konvertera UTF-8 till ISO 8859-1?
I nästa skede ska jag även skapa XML.
Då måste jag konvertera från ISO 8859-1 till UTF-8.
Dvs kod eller liknende (dll?) för konvertering åt båda håll önskas.
/ MikaelSv: MSXML
Hela iden med XML är väl att man kan använda vilken teckenuppsättning man vill bara man anger i filen vilken det är.
MSXML interfacet använder alltid unicode och konverterar XML filen åt dig när det behövs (i båda riktningarna).
Om de data du har är 8859-1 finns det väl ingen anledning att skapa en XML fil med UTF-8?Sv: MSXML
<Name>700 - N=C3=A4tanalys</Name>
Dvs 700 - Nätanalys
Om jag hämtar tagginnehållet med msxml.dll:s DOM blir resultatet
<Name>700 - N=C3=A4tanalys</Name>
Dvs ingen konvertering till 8859 sker.
Vad gör jag för fel??
Menar du att det i xml-datat skall framgå vilken teckenuppsättning det är?
Det står ingenstans i xml-filen (det är egentligen ingen fil, det är ju text i en tabell).
/ MikaelSv: MSXML
Ditt problem verkar dock ligga på en annan nivå.
Databasinterface via t.ex. ADO är alltid i unicode (BSTR). Det som har hänt i det här fallet är nog att windows tror att databasen är i 8859-1 och har således gjort en felaktig konvertering från 8859-1 -> unicode istället för UTF8->unicode. Har ingen aning om hur man får ADO att förstå att data i databasen är i UTF8.
Att göra konverteing efteråt blir extra komplicerat eftersom du inte längre har utf-8 data utan unicode. Du måste således först konvertera tillbaka till 8859-1 och sen göra en korrekt kovertering utf-8 till unicode. Troligen kan du använda WideCharToMultiByte funktionen men jag vet inte hur man använder den från VB.Sv: MSXML
Men jag lägger det här i alla fall beroende på att det hör ihop med tidigare inlägg.
Jag vill skapa xmldata.
Datat skall läggas i min sql-server fvb till en B2B-applikation.
Dvs det handlar INTE om att nyttja XML för websidor eller likande.
Hur kan jag nyttja msxml.dll för att skapa detta xmldata?
Jag har tidigare testat detta mha SoapSerializer30 i en w2k-maskin. (blev aldrig klart).
Nu kör jag på w2k3-server.
Detta innebär att soap30 inte längre finns/behövs.
Vad används i w2k3?
Hur?
Rätt teckenuppsättning på utdatat (UTF8)!
/ Mikael
Fel av mig.
Soap30 fanns visst med för w2k3.
/ Mikael