Schlumpfxy: XML mit VBScript auslesen

Beitrag lesen

Hallo zusammen,

ich habe die Aufgabe bekommen, eine ASP Seite zu schreiben, welche ein XML File ausliest und die dort enthaltenen Felder in eine Datenbanktabelle schreibt. Das ganze soll mit VBScript realisiert werden. Ich habe nun angefangen, mehrere Möglichkeiten auszuprobieren, schaffe es aber höchstens den ersten Knoten auszulesen. Alle anderen Knoten werden anscheinen gar nicht angefasst. Hier ist ein Ausschnitt aus dem XML:

  
<advertiser>  
  <auto>  
    <clientId>e9e47a16-8668-4938-8dc6-5228ee797d95</clientId>  
    <stockNo>3500</stockNo>  
    <year>1954</year>  
    <make>Hudson</make>  
    <model>Italia</model>  
    <trimLine></trimLine>  
    <bodyStyle></bodyStyle>  
    <category></category>  
    <interiorColor>Black</interiorColor>  
    <exteriorColor>Silver</exteriorColor>  
    <mileage></mileage>  
    <vin>11</vin>  
    <title></title>  
    <engineType></engineType>  
    <engineDescription></engineDescription>  
    <transmissionType></transmissionType>  
    <transmissionDescription></transmissionDescription>  
    <driveTrain></driveTrain>  
    <wheelbase></wheelbase>  
    <doors></doors>  
    <fuelType></fuelType>  
    <description>Silver with black leather. Older restoration</description>  
    <descriptionPrint></descriptionPrint>  
    <price>325000</price>  
    <priceComment></priceComment>  
    <image1>http://www.hymanltd.com/vehicleImages/3500_1.jpg</image1>  
    <image2>http://www.hymanltd.com/vehicleImages/3500_2.jpg</image2>  
    <image3>http://www.hymanltd.com/vehicleImages/3500_3.jpg</image3>  
    <image4>http://www.hymanltd.com/vehicleImages/3500_4.jpg</image4>  
    <image5>http://www.hymanltd.com/vehicleImages/3500_5.jpg</image5>  
    <image6>http://www.hymanltd.com/vehicleImages/3500_6.jpg</image6>  
  </auto>  
</advertiser>  

Natürlich gibt es da noch mehr <auto> Knoten.
Mit folgendem Script kann ich die einzelnen Elemente ansprechen. Aber wie gesagt, nur aus dem ersten <auto> Knoten:

  
function readXML2DB_old()  
 Response.Buffer = True  
  
 Dim objXML, strPath, oRoot, x, strClientId, strStockNo, strYear, strMake, strModel, strTrimLine,strCategory, strIntColor, strExtColor, strMileAge, strVin, strTitle, strEngType, strEngDisc  
 Dim strTransType, strTransDesc, strDriveTrain, strWheelBase, strDoors, strFuelType, strDescription, strPrice, strPriceComment, strImage1, strImage2, strImage3, strImage4, strImage5, strImage6, strImage7  
 Dim strImage8, strImage9, strImage10, strImage11, strImage12, strImage13, strImage14, strImage15, strUrl  
 Dim objNodeList  
 Dim oNode  
  
  strPath = "/upload/import/xml/hymanltd.xml"  
 Set objXML = Server.CreateObject("Microsoft.XMLDOM")  
 objXML.async = False  
 objXML.load (Server.MapPath(strPath))  
  
 If objXML.parseError.errorCode <> 0  Then  
  Response.Write(objXML.parseError.reason)  
  Response.Write(objXML.parseError.errorCode)  
 End If  
Set objNodeList = objXML.documentElement.selectNodes("//advertiser/*")  
oRoot = objNodeList.ChildNode  
response.write objNodeList.length  
  for each x in oRoot.ChildNodes  
   Select Case x.baseName  
    case "clientId"  
     strClientId = x.text  
    case "stockNo"  
     strStockNo = x.text  
   case "year"  
     strYear = x.text  
    case "make"  
     strMake = x.text  
    case "model"  
     strModel = x.text  
    case "trimLine"  
     strTrimLine = x.text  
    case "category"  
     strCategory = x.text  
    case "interiorColor"  
     strIntColor = x.text  
    case "exteriorColor"  
     strExtColor = x.text  
    case "mileage"  
     strMileAge = x.text  
    case "vin"  
     strVin = x.text  
    case "title"  
     strTitle = x.text  
    case "engineType"  
     strEngType = x.text  
    case "engineDescription"  
     strEngDisc = x.text  
    case "transmissionType"  
     strTransType = x.text  
    case "transmissionDescription"  
     strTransDesc = x.text  
    case "driveTrain"  
     strDriveTrain = x.text  
    case "wheelbase"  
     strWheelBase = x.text  
    case "doors"  
     strDoors = x.text  
    case "fuelType"  
     strFuelType = x.text  
    case "description"  
     strDescription = x.text  
    case "price"  
     strPrice = x.text  
    case "priceComment"  
     strPriceComment = x.text  
    case "image1"  
     strImage1 = x.text  
    case "image2"  
     strImage2 = x.text  
    case "image3"  
     strImage3 = x.text  
    case "image4"  
     strImage4 = x.text  
    case "image5"  
     strImage5 = x.text  
    case "image6"  
     strImage6 = x.text  
    case "image7"  
     strImage7 = x.text  
    case "image8"  
     strImage8 = x.text  
    case "image9"  
     strImage9 = x.text  
    case "image10"  
     strImage10 = x.text  
    case "image11"  
     strImage11 = x.text  
    case "image12"  
     strImage12 = x.text  
    case "image13"  
     strImage13 = x.text  
    case "image14"  
     strImage14 = x.text  
    case "image15"  
     strImage15 = x.text  
    case "url"  
     strUrl = x.text  
    case else  
   end select  
  next  
  response.write strImage1  
set objXML = nothing  
  
end function  

Ich weiß, das das nicht die feinste Art ist, aber ich war froh, dass ich wenigstens auf die Elemente zugreifen konnte. Da mich das nicht befriedigt hat, habe ich weiter gegoogelt und folgendes gefunden:

  
function readXML2DB()  
Dim strPath  
strPath = "/upload/import/xml/hymanltd.xml"  
set xmlDoc=CreateObject("Microsoft.XMLDOM")  
xmlDoc.async="false"  
xmlDoc.load(Server.MapPath(strPath))  
  
for each x in xmlDoc.documentElement.childNodes  
  response.write(x.nodename)  
  response.write(": ")  
  response.write(x.text)  
  
next  
  
end function  

Diese liest nun schreinbar alle <auto> Knoten aus, aber ich komme nicht an die einzelnen Elemente ran, da die Werte in einem großen String drin stehen. wie z.B.
auto: clientIdstockNoyearmakemodel
also da steht alles hintereinander weg.
Nun meine Frage: Gibt es eine Möglichkeit diese Elemente irgendwie anzusprechen? Ich habe mal was von GetElementbyTag und so gelesen, nur weiß ich nicht, ob das hier richtig ist!

Vielen Dank für die Mühe!

Daniel