Avatar billede mini-me Nybegynder
02. december 2009 - 18:57 Der er 17 kommentarer

Hjælp til XML

Hej,

Jeg har brug for hjælp til at komme igang med at læse en XML fil.

Udsnit af min XML fil.:

<?xml version="1.0" encoding="UTF-8" ?>
- <LP1Data CreatedBy="LP1" Date="2009-11-24">
- <Parameter ID="LP1_WOOD" Name="Træsort">
  <Value ID="LP1_WOOD_PINE" PriceID="" Name="Fyrretræ" />
  <Value ID="LP1_WOOD_MAHOGNY" PriceID="LP1_WOOD_MAHOGNY" Name="Mahogni" />
  <Value ID="LP1_WOOD_WOODALU" PriceID="LP1_WOOD_WOODALU" Name="Træ/Alu" />
  </Parameter>
- <Parameter ID="LP1_GLASS" Name="Glas">
  <Value ID="LP1_STD_GLASS" PriceID="" Name="Superlavenergi 1.1" />
  <Value ID="LP1_COSTWOLD_GLASS" PriceID="LP1_COSTWOLD_GLASS" Name="Råglas Costwold 1.1" />
  <Value ID="LP1_SANDBLAEST_GLASS" PriceID="LP1_SANDBLAEST_GLASS" Name="Råglas Sandblæst MAT 1.1" />
  <Value ID="LP1_LYD_GLASS" PriceID="LP1_LYD_GLASS" Name="Lydglas 4-12-6 1.1" />
  </Parameter>


Her vil jeg gerne have at den automatisk laver en select box for hver af de forskellige typer parameter.

eks.:

<select name="LP1_wood">
<option value="LP1_Wood">Fyrretræ</option>
...
</select>

osv.
Avatar billede keysersoze Guru
02. december 2009 - 20:48 #1
Avatar billede mini-me Nybegynder
02. december 2009 - 21:12 #2
Tak - men vil du lave et working example ? ;-)
Avatar billede keysersoze Guru
02. december 2009 - 22:20 #3
Nej - vil gerne yde hjælp her på siden men ikke udføre arbejde. Gør du et forsøg selv kan vi sikkert løse det her på siden de steder du går i står.
Avatar billede mini-me Nybegynder
02. december 2009 - 22:27 #4
Så snart jeg kalder den her så får jeg fejl:

sParameters = doc.GetElementsByTagName("Parameter")

Microsoft VBScript runtime error '800a01c2'

Wrong number of arguments or invalid property assignment: 'medlemmer'

/custom/showproduct.asp, line 85
Avatar billede keysersoze Guru
02. december 2009 - 22:34 #5
den linie du mener der er fejl i og fejlbeskrivelsen hænger ikke sammen - fejlen antyder jo at noget omkring "medlemmer" ikke stemmer overens.
Avatar billede mini-me Nybegynder
02. december 2009 - 22:36 #6
Fordi jeg omdøbte medlemmer til sParameters før jeg postede.
Avatar billede mini-me Nybegynder
02. december 2009 - 22:44 #7
Microsoft VBScript runtime error '800a01c2'

Wrong number of arguments or invalid property assignment: 'sParameters'

/custom/showproduct.asp, line 85
Avatar billede keysersoze Guru
02. december 2009 - 23:05 #8
uden mere kode komme vi vist ikke langt.
Avatar billede mini-me Nybegynder
02. december 2009 - 23:11 #9
Set doc = CreateObject("Microsoft.XMLDOM")
    doc.async = False
    ' Indlæs filen
    doc.load(server.MapPath("/datastore/LP1-Export.xml"))
    if doc.parseError.errorcode<>0 then
      'error handling code
      response.Write("Ugyldig fil")
    else
      ' proceed
      response.Write("Fil OK")

        sParameters = doc.GetElementsByTagName("Parameter")


Giver den fejl...

Og xml filen jeg læser er det jeg har givet et udsnit af i 1. post
Avatar billede keysersoze Guru
02. december 2009 - 23:23 #10
Set sParameters = doc.GetElementsByTagName("Parameter")

hvis du går ud fra guiden så få alle ting med...
Avatar billede mini-me Nybegynder
02. december 2009 - 23:31 #11
Arh... det havde jeg overset.
Avatar billede mini-me Nybegynder
02. december 2009 - 23:37 #12
Nu er den XML fil jeg skal bearbejde ikke konstrueret helt på samme måde som den i eksemplet så bliver nød til at have noget mere hjælp.

Som jeg forstår det så finder jeg alle parametre ved at benytte.

Set medlemmer = doc.GetElementsByTagName("Parameters")

Så den burde bestå af


<Parameter ID="LP1_WOOD" Name="Træsort">
<Parameter ID="LP1_GLASS" Name="Glas">

Osv. er det rigtig forstået?

Kan jeg så lave en for each newParam in Parameters og så udskrive "name" på denne parameter? i denne løkke, og inden i denne løkke laver jeg endnu en hvor jeg så henter alle values ud.
Avatar billede mini-me Nybegynder
02. december 2009 - 23:56 #13
Har sammenkogt det her, og det virker som sådan, men når jeg løber min subliste igennem så gentager den alle values, jeg skal kun have dem som hører til de "parentnode"


Set sParameters = doc.GetElementsByTagName("Parameter")

        Set NodeList = doc.getElementsByTagName("Parameter")
        For Each Elem In NodeList
            response.write(Elem.tagName & "<br>")
            response.write(Elem.Attributes.GetNamedItem("Name").Value & "<br>")

            Set subNodeList = doc.getElementsByTagName("Value")
            For Each subElem In subNodeList
                response.write(subElem.Attributes.GetNamedItem("Name").Value & "<br>")
            Next
        Next
Avatar billede arne_v Ekspert
03. december 2009 - 03:22 #14
Set subNodeList = doc.getElementsByTagName("Value")

skal nok være:

Set subNodeList = Elem.getElementsByTagName("Value")
Avatar billede mini-me Nybegynder
03. december 2009 - 09:31 #15
Hej Arne,

Det løste problemet - så er det kun et sidste issue.

Længere nede i min XML Fil har jeg følgende.:

<WindowPriceTables WindowType="NK-S1" WindowClass="DK" MinH="800" MaxH="1500" MinW="400" MaxW="700" StepH="50" StepW="50">
- <Parameter ID="LP1_OPENING" Name="Åbningsretning">

Og dem er der en del af, dvs. at når jeg nu udskriver det så kommer disse med, det jeg ønsker er at sætte en "regel" op så den kun medtager disse parametre såfremt at WindowType er netop det vindue jeg står på.

Kan i guide mig i en regning til løsning af dette?
Avatar billede arne_v Ekspert
03. december 2009 - 19:34 #16
Proev med XPath til det.

wpt = doc.SelectSingleNode("//WindowPriceTables[WindowType='" & typ & "']")
Avatar billede arne_v Ekspert
10. januar 2010 - 04:43 #17
Tid at få afsluttte her ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester