Avatar billede lester_dk Nybegynder
14. marts 2004 - 16:11 Der er 2 kommentarer og
1 løsning

Læse bestemte værdier

Situationen er den at jeg har nogle priser der går igen rundt om på díverse sider. Jeg vil gerne udtrække de´m fra et central XML-dokument. Så kan jeg rette alle priser én gang for alle.

Jeg forestiller mig noget i retning af at mit XML-doc ser sådan ud:

<?xml version="1.0" ?>
<prisliste>
<pris_hoj_voksen>
  45
</pris_hoj_voksen>
<pris_lav_voksen>
  40
</pris_lav_voksen>
</prisliste>

Har så et ASP-dokument, hvor der er en tabel, hvor jeg så i nogle bestemte felter vil udskrive de værdier jeg nu skal bruge.
XML-filen ligger i samme mappe som resten af filerne.

Har set noget GetElementsByName("pris_lav_voksen").text men kan nu ikke få det til at funke.

Det jeg søger er et kort og præcist svar på hvordan jeg åbner mit XML, udtrækker den eller de felter jeg ønsker og smider disse i hver deres Variable.

Det er VB jeg benytter, f.eks. vil jeg gerne have en Var. der hedder strPris_lav_voksen, der indeholder værdien 40 fra mit XML-doc.

De fleste ting jeg finder omhandler at gennemløbe hele XML-filen og så udskrive hele molevitten, og det er ikke det jeg søger.

På forhånd tak.
Avatar billede kimovitch Nybegynder
14. marts 2004 - 17:23 #1
Hej lester

Du skal oprette et DOM document:

  set oSource = Server.CreateObject("MSXML2.DOMDocument.3.0")
  oSource.async = false
  oSource.load(Server.MapPath("fil.xml"))

Nu kan du hente værdierne fra de enkelte noder, f.eks.:
  set oPrisHojVoksen = oSource.selectSingleNode("//pris_hoj_voksen")
  strPrisHojVoksen = oPrisHojVoksen.text

Bemærk at selectSingleNode() finder én node (den første), dvs hvis du har flere noder, der hedder pris_hoj_voksen duer det ikke. Så skal du i stedet bruge selectNodes(), der returnerer et node-set, som du kan løbe igennem:
  for each n in oSource.selectNodes("//pris_hoj_voksen")
      response.write n.text
  next

Og endelig:
  ("//pris_hoj_voksen") er en slags søgestreng som matcher alle pris_hoj_voksen noder i dokumentet uanset placering. Du kan referere til noder på et bestemt niveau ved at skrive hele stien ("prisliste/pris_hoj_voksen"). Der er desuden en masse smarte ting man kan bruge for at søge helt specifikke noder, f.eks hvor prisen er over 40: ("prisliste/pris_hoj_voksen[.<40]")

Med venlig hilsen
Kim
Avatar billede lester_dk Nybegynder
14. marts 2004 - 19:28 #2
Det lyder meget rigtigt, fandt så selv frem til at:

strPris_pladsgebyr = XML_stream.getElementsByTagName("pris_pladsgebyr").item(0).text

også virker. Glemte så bare lige at lukke tråden her. Men tro faktisk jeg blev lidt klogere på dit svar.

Smid et svar, hvis du vil have lidt points at guffe på?
Avatar billede kimovitch Nybegynder
14. marts 2004 - 23:11 #3
Jo tak.
Du skulle kigge lidt på xsl hvis du vil gå videre med xml - det er et stylesheet hvor du f.eks. kan html-formattere xml-dokumentet præcis som du vil have det. Især hvis der er mange forskellige noder og attributes der skal læses kan det blive lidt bøvlet i en asp-fil, og hvis man vil rette lidt i html-koden (f.eks. tilføje en kolonne i en tabel) skal man rode rundt imellem en masse response.write osv., der er xsl overskueligt fordi det hele foregår som xml. God fornøjelse.
Kim
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