Jag vill leta i min XML-fil efter poster som har en speciell text i sig.. och för varje sådan post så vill jag uppdatera min mysql-databas med ytterligare lite information från posten.
Typ så här:
If XML_Titel = "Mr" Then
Uppdatera min MySQL-databas med värdena från XML_Titel och XML_Namn
Else kolla igenom nästa post
End If
ASP-kod (denna kod skriver just nu bara ut namnet på personen med titel Mr)
set oDOM = server.createobject("msxml2.domdocument")
oDOM.load server.mappath("foo.xml")
set oNodeList = oDOM.SelectNodes("//Person[@title='Mr']")
for each oNode in oNodeList
sName = oNode.getAttribute("name")
Response.Write sName & "<br/>"
next
set oNodeList = nothing
set oDOM = nothing
set oDOM = server.createobject("msxml2.domdocument")
oDOM.load server.mappath("foo.xml")
set oNodeList = oDOM.SelectNodes("//Person[@title='Mr']/Name")
for each oNode in oNodeList
sName = oNode.text '.getAttribute("name")
Response.Write sName & "<br/>"
next
set oNodeList = nothing
set oDOM = nothing
Det bästa vore nog om du visade exempel på hur din xml-fil ser ut.
Tror att jag hajjar det nu, men jag får ändå inte det här att funka:
<%
set oDOM = server.createobject("msxml2.domdocument")
oDOM.load server.mappath("minXML.xml")
set oNodeList = oDOM.SelectNodes("//invoicespecification/parcels/orderitem/suplementary/name")
for each oNode in oNodeList
sName = oNode.text '.getAttribute("name")
If InStr(sNamn,"Retur") Then
Response.Write sName & "<br/>"
End If
next
set oNodeList = nothing
set oDOM = nothing
%>
Jag föstår nu hur jag skriver ut alla värden från ett speciellt fält (eller vad kallar man det)... men hur gör jag för att leta upp alla som har värdet "Retur" i valt name-fält... och för varje post som har värdet "Retur" så ska jag även leta upp värdena i dom fet-markerade fälten?
Du får nog läsa på lite om alla metoder och egenskaper som MSXML tillhandahåller, men så här hade jag gjort:
set oDOM = server.createobject("msxml2.domdocument")
oDOM.load server.mappath("foo.xml")
set oNodeList = oDOM.SelectNodes("/invoicespecification/parcels/orderitem")
for each oNode in oNodeList
sRef = ""
sPrice = ""
sName = ""
sSupPrice = ""
set oName = oNode.selectSingleNode("suplementary").selectSingleNode("name")
if not oName is nothing then
sName = oName.text
end if
if sName = "Retur" then
set oReference = oNode.selectSingleNode("reference")
if not oReference is nothing then
sRef = oReference.text
end if
set oPrice = oNode.selectSingleNode("price")
if not oPrice is nothing then
sPrice = oPrice.text
end if
set oSupPrice = oNode.selectSingleNode("suplementary").selectSingleNode("price")
if not oSupPrice is nothing then
sSupPrice = oSupPrice.text
end if
Response.Write "Reference: " & sRef & "<br/>"
Response.Write "Price: " & sPrice & "<br/>"
Response.Write "Suppl. name: " & sName & "<br/>"
Response.Write "Suppl. price: " & sPrice & "<br/>"
end if
set oReference = Nothing
set oPrice = Nothing
set oName = Nothing
set oSupPrice = Nothing
next
set oNodeList = nothing
set oDOM = nothing
Men när jag försöker koppla det till databasen så hittar den inga i tabellen Arkiv där Ordernummer är = sRef... fattar inte varför... alla posterna som den ska leta efter i tabellen finns, men den hittar dom inte... Med att "den inte hittar" så menar jag att den hela tiden lämnar variabeln sID tom... Med andra ord så är RecSet EOF hela tiden... fattar inte varför
If sName = "Retur" Then
Set oReference = oNode.selectSingleNode("reference")
If NOT oReference IS NOTHING Then
sRef = oReference.text
End If
Set oPrice = oNode.selectSingleNode("price")
If NOT oPrice IS NOTHING Then
sPrice = oPrice.text
End If
Set oSupPrice = oNode.selectSingleNode("suplementary").selectSingleNode("price")
If NOT oSupPrice IS NOTHING Then
sSupPrice = oSupPrice.text
End If
getDatabase = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=; UID=;PASSWORD=;OPTION=3"
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open = getDatabase
Set Recset = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM Arkiv WHERE Ordernummer = "&Int(sRef)&""
RecSet.Open SQL, Connect, 1, 2
If NOT RecSet.EOF Then
sID = RecSet("sID")
End If
Set Connect = NOTHING
Set RecSet = NOTHING
Response.Write "Säljare: "&sID &"<br/>"
Response.Write "Reference: "&sRef&"<br/>"
Response.Write "Price: "&sPrice&"<br/>"
Response.Write "Suppl. name: "&sName&"<br/>"
Response.Write "Suppl. price: "&sPrice&"<br/>"
Response.Write "<br/>"
End If
Om jag kör den i ett annat verktyg så funkar den frågan ja! Kan det vara fel på typ anslutningen eller något? Får jag inte köra SQL-frågor i en For-sats?
Jodå, men det känns kanske dumt att skapa och förstöra connectionobjektet inne i for-slingan.
Lyft ut detta:
getDatabase = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=; UID=;PASSWORD=;OPTION=3"
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open getDatabase
Set Recset = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM Arkiv WHERE Ordernummer = 273"
RecSet.Open SQL, Connect, 1, 2
If NOT RecSet.EOF Then
sID = RecSet("sID")
End If
Set Connect = NOTHING
Set RecSet = NOTHING
och kör den koden för sig själv. Notera att du inte ska ha = efter connect.open. Det är en metod, inte en egenskap.
OMG. OMG. Den letar ju efter LOCALHOST! Jag sitter ju för ovanlighetens skull inte på serverdatorn och kodar nu. Gud, vad jag skäms!! Åååh, nu funkar det ju! Shit vad vackert! ....FANTASTISKT! Förlåt att jag tabbade mig så!
Du är jävligt bra på det du gör asså! Tack så jävla mycket !!!!
Jag ska sätta mig in mer i det här med MSXML nu... försöka i alla fall! Du har gett mig en bra grund att stå på! Tack!