Avatar billede bruhnsweb Nybegynder
07. januar 2004 - 21:27 Der er 17 kommentarer og
2 løsninger

Hvordan henter man xml?

Hej Eksperter

Jeg har flere gange lavet et xml-dokument, eller en crawlpage som de vist kalder det til nogle kunder.

Det er nemt nok at smide lidt asp ind i det, eks.:
<title><%rs("title")%></title>

Det jeg tænker på er hvordan henter man de data og smider dem i ens egen database, eller hvad man nu gør?

Firma X henter hver dag alle vores nyheder, via en side som jeg har lavet til dem (crawlpage)!

Hvordan gør de det?

//Bruhn
Avatar billede arne_v Ekspert
07. januar 2004 - 21:58 #1
Jeg tror ikke jeg forstår.

Man kan lave et program som via HTTP protokollen henter en fil og
gemmer den i en database. Og man kan også lade det program recurse
(parse HTML eller XML og hente linkede sider).

Men det er vel ligetil og har ikke noget med XML som sådan at gøre.
Avatar billede davidchristensen Praktikant
08. januar 2004 - 06:06 #2
Man bruger XSL! Det er lissom en form for dynamisk html, der netop er opfundet for at hente data i xml og skrive f.eks en html-side ud af det hele.

Du kan iøvrigt IKKE skrive asp-kode ind i et xml-dokument på den måde du har gjort der - det kan du læse om på http://www.w3schools.com/ hvor de nænver syntaxen i xml (som iøvrigt er MEGET nem). Derudover er det ikke meningen at man skal blande xml og ekseverende kode sammen som du gør (jeg går ud fra det er et xml-eksempel og ikke html-asp). Anyway, det er netop fidusen ved xml at man holder data og layuot hver for sig lissom man holder data i en database. XML kan også ses som en database fordi det er noget der holder data, men det er en database der kan kaldes via http på kryds og på tværs af internettet og uden nogen form for databaseadgang.

Læs de små turtorials (XML og XSL) jeg har givet dig et link til, så skal tiøren nok falde ;)

David
-
Avatar billede bruhnsweb Nybegynder
08. januar 2004 - 09:52 #3
Laver lige et eksempel mere så:

----------------------------------------
<?xml version="1.0"?>
<root>

<%
Set RS_anmeldelser = Server.CreateObject("ADODB.RecordSet")
RS_anmeldelser.open "Select * From [anmeldelser] Order by id desc" , Conn

i = 0
Do while not i = 10 and not RS_anmeldelser.EOF
%>

<article>
<headline><![CDATA[<%=RS_anmeldelser("titel")%>]]></headline>
<story><![CDATA[<% tekst = replace(RS_anmeldelser("tekst"),vbCrLf,"<br>")
response.write tekst %>]]></story>
</article>
<%
i = i + 1
RS_anmeldelser.MoveNext
Loop
RS_anmeldelser.Close
%>
</root>
----------------------------------------

Dette er et forkortet eksempel på hvordan en af vores kunder henter indhold fra vores side.
Spørgsmålet er så igen, hvordan henter man det indhold?

//Bruhn
Avatar billede davidchristensen Praktikant
08. januar 2004 - 10:19 #4
Allright.. Lad os sige du har et xml-dokument sådanher:


<?xml version="1.0"?>
<root>
<article>
<headline>Bla</headline>
<story>blabla</story>
</article>
</root>

Så skal du lave en xsl-fil, der ser nogenlunde sådanher ud:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
Headline: <xsl:value-of select="headline"/>
<br/>
Story: <xsl:value-of select="story"/>
</xsl:template>
</xsl:stylesheet>

Idether eksempel mangler der hvilket format du vil outputte til (fx. html).

I <xsl:value-of select="vælg-hvad-du-vil-vælge"> kan du bruge Xpath til at vælge forskellige ting i dit XML-dokument.

Har du læst i de links jeg sendte dig? Ellers skulle du gøre det nu, og så vil det give meget mere mening for dig :) Man kan også bruge andre <xsl:etellerandet> kommandoer i en xsl-fil (eller xsl-stylesheet som det faktisk hedder lidt efter min mening misvisende)

Du kan så vidt jeg ved godt lave en ren asp-løsning som henter bestemte noder i et xml-dokument, men jeg vil anbefale at du bruger xsl, da xml og xsl passer enormt godt sammen - og at du så bruger asp til serversidet at skrive et output som f.eks html.
Avatar billede nute Nybegynder
09. januar 2004 - 10:10 #5
hvordan de henter det indhold ? de kører siden !!

Du har lavet en side til dem, der ligger på din server. denne server er højst sandsynlig offentlig tilgængelig, på en offentlig tilgængelig webserver. De kender placeringen af denne fil, og simpelthen taster URL'en til denne side ind i sin browser, så vil de få resultatet. Alternativt, så henter de data via script ved at benytte HTTP kald ved hjælp af nogle komponenter, fx. AspHTTP eller andre lignende komponenter.

Resultatet de får, vil være en xml fil på HTTP streamen som de kan gøre hvad de ønsker med ...

/nute
Avatar billede bruhnsweb Nybegynder
09. januar 2004 - 10:15 #6
De kører en update hver morgen tror jeg.. Og ja det er en offentlig tilgængelig url, som kun de kender adressen til.

Men skal jeg så bare smide ovenstående ind i en fil og så køre den, eller hvordan foregår det?
Avatar billede davidchristensen Praktikant
09. januar 2004 - 10:40 #7
"Det jeg tænker på er hvordan henter man de data og smider dem i ens egen database, eller hvad man nu gør?"

Dataene henter de ved at skrive www.ditsite.dk/ditxmldokument.xml fx. i deres browser.

Om de så vil putte data ind i deres egen DB må de jo selv om, men det vil jo som sådan ikke give nogen mening - de kan bare nøjes med at have et link til din .xml hvor de så henter data fra. Som sagt, en del af ideen med xml er at kunne dele data på tværs af www via http uden nødvendigvis at skulle bruge en egentlig database.
Avatar billede nute Nybegynder
09. januar 2004 - 10:46 #8
Hvis du smider det overstående ind i en .asp fil, så vil man få xml'en som resultat. Hvis de kun vil ha xml fra din site, så kan jeg ikke se andet end at det er sådan du skal gøre det. Hvad de så gør med dine data, er jo sådan set ligegyldig. Men hvis du kun skal lave noget xml ud fra indholdet i din database, så ja ... smid koden ind i en .asp fil og prøv. så vil du se at du får xml i din browser ... ;-)
Avatar billede bruhnsweb Nybegynder
09. februar 2004 - 13:16 #9
Ok - hvis jeg nu vil have nyheder fra siden filmz.dk ind på min side.
De har et xml dokument liggende: http://filmz.dk/rdf
Hvis de så eks. skal blandes med mine egne nyheder, hvad gør jeg så?
Avatar billede nute Nybegynder
09. februar 2004 - 13:28 #10
læs denne artikel, den bør give dig nogle gode råd:

http://www.html.dk/scripts/asp/00020/

/nute
Avatar billede bruhnsweb Nybegynder
09. februar 2004 - 14:04 #11
Klasse - Det er helt sikkert det jeg skal bruge!!

Jeg har dog stadig lidt svært ved at forstå det helt..

Eks. så skriver de når de henter:
http://rss.com.com/2547-12-0-20.xml
--------------------------------------------------------------------------
' Åbn elementet <article>
Set oNode = xmldoc.documentElement.getElementsByTagName("article")
For each Item in oNode
' Udskriv titel og beskrivelse for din article
Response.Write "<h1>" & Item.ChildNodes.Item(0).text & "</h1>"
Response.Write "<p>" & Item.ChildNodes.Item(2).text & "</p>"
--------------------------------------------------------------------------

Men i XML-dokumentet står titel og beskrivelse som:
--------------------------------------------------------------------------
<title>CNET News.com - Front Door</title>
<description>The Fraudulent Online Identity Sanctions Act is misdirected in its effort to crack down on domain registrations, says CNET News.com's Declan McCullagh.</description>
--------------------------------------------------------------------------

Hvordan hænger det sammen?
Avatar billede nute Nybegynder
09. februar 2004 - 14:14 #12
din XML struktur, er sådan:
<rdf>
<item rdf:about="http://filmz.dk/forum/item/5390/">
    <title></title>
    <link></link>
    <description></description>
    <dc:creator></dc:creator>
    <dc:date></dc:date>
    <dc:subject></dc:subject>
</item>
</rdf>

denne linje:

Set oNode = xmldoc.documentElement.getElementsByTagName("article")

skal være den linje der hænter ud alle dine "artikler" (som vil være alle 'item' i din xml). Du skal så skrive dette i stedet for:

Set oNode = xmldoc.documentElement.getElementsByTagName("item")

Denne linje:

For each Item in oNode

løber alle dine 'item' igennem og denne linje:

Response.Write "<h1>" & Item.ChildNodes.Item(0).text & "</h1>"

skriver ud den første 'childnode' til dit 'item'

hvis du skal hænte ud <title> og <description>, så skal du skrive nøjagtig det samme, siden title er den aller første childnode til 'item' og 'description' er nummer 2 (husk at ChildNodes returnerer en 0-baseret collection - derfor bliver det første element i denne collection nummer 0 --> Item.ChildNodes.Item(0) )

/nute
Avatar billede bruhnsweb Nybegynder
09. februar 2004 - 14:19 #13
Ok, så man skal altså tælle!

Eks.:

Title = Item.ChildNodes.Item(0)
desc = Item.ChildNodes.Item(1)
link = Item.ChildNodes.Item(2)

osv...
Avatar billede davidchristensen Praktikant
09. februar 2004 - 14:24 #14
Jeg vil bestemt mene at det er dobbeltarbejde at bruge klasser til dether.. brug dog .xsl - det er opfundet til det samme og har alt hvad du skal bruge indbygget på forhånd
Avatar billede nute Nybegynder
09. februar 2004 - 14:26 #15
er enig i at det vil være pænere at bruge xsl til dette

/nute
Avatar billede bruhnsweb Nybegynder
09. februar 2004 - 14:29 #16
xsl?

I tabte mig lige der hvor jeg troede jeg havde fat i den lange ende :o(
Avatar billede davidchristensen Praktikant
09. februar 2004 - 14:31 #17
Læs lige om xsl her på dether site http://www.w3schools.com/ så forstår du hvad vi mener.. *s*
Avatar billede bruhnsweb Nybegynder
09. februar 2004 - 15:18 #18
Nute >> Sender du også et svar ??

Jeg holder mig nok til ovenstående indtil videre :o)
Avatar billede nute Nybegynder
09. februar 2004 - 15:29 #19
svar
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