Avatar billede carstenandersen Nybegynder
09. december 2010 - 14:52 Der er 27 kommentarer og
1 løsning

Vise XML på hjemmeside ud fra URL

Hej eksperter

Jeg har søgt og søgt på eksterten, men mangler overblik over, hvordan jeg får vist XML-indhold ud fra en URL. Det er vedr. Kelkoo API, hvor URL´en f.eks. er:

http://dk.shoppingapis.kelkoo.com/V2/productSearch?query=ipod&sort=default_ranking&start=1&results=1&show_products=1&show_subcategories=0&show_refinements=0&aid=xxxxxx×tamp=1291902109&hash=96ZS6wyY_QlxTGpNzN7G1Q--

og indholdet af URL´en er:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <ProductSearch xmlns="urn:yahoo:prods">
- <Products firstResultPosition="1" totalResultsAvailable="4579" totalResultsReturned="1">
- <Product type="Offer">
- <Offer id="fe81e2f75ac9423cf0be152fce9ded10">
<Url>http://ecs-dk.kelkoo.dk/ctl/go/sitesearchGo?.ts=1291902496077&.sig=YTTlbCkVq0cvDuXHSOl.5xnWJLI-&offerId=fe81e2f75ac9423cf0be152fce9ded10&searchId=107611478_1291902496077_1840937382&affiliationId=xxxxxxxx&country=dk&wait=true&ecs=ok&contextLevel=1&merchantid=7484723&comId=7484723&catId=122701</Url>
<CompareUrl>http://www.kelkoo.dk/p-mp3afspillere-multimedieafspillere-122701/apple-ipod-nano-8-gb-fjerde-generation-solv-19570186?partnerId=xxxxxxxx</CompareUrl>
<ProductName>Apple iPod nano 8GB - sølv</ProductName>
<Price currency="dkk">1199.00</Price>
<DeliveryCost>0</DeliveryCost>
<DeliveryTime>2-4 dage</DeliveryTime>
<Availability>Lagerstatus: PÃ¥ lager</Availability>
<Used>false</Used>
- <ListImage>
<Url>http://r.kelkoo.com/r/dk/7484723/122701/90/90/http%3A%2F%2Fimages.pricerunner.com%2Fproduct%2Fimage%2F152125632%2FApple-iPod-Nano-8GB-Silver-%286th-Generation%29.jpg/JNQ.KOgowS2O.kj9kgAYxe58KdqoGq2Ntg8.gdTYrQI-</Url>
<Height>90</Height>
<Width>90</Width>
</ListImage>
- <GridImage>
<Url>http://r.kelkoo.com/r/dk/7484723/122701/90/90/http%3A%2F%2Fimages.pricerunner.com%2Fproduct%2Fimage%2F152125632%2FApple-iPod-Nano-8GB-Silver-%286th-Generation%29.jpg/JNQ.KOgowS2O.kj9kgAYxe58KdqoGq2Ntg8.gdTYrQI-</Url>
<Height>90</Height>
<Width>90</Width>
</GridImage>
<Summary>Multi-touch Perfekt størrelse</Summary>
- <Merchant id="7484723">
<Name>Wupti.com</Name>
</Merchant>
<CatalogID>122701-19570186</CatalogID>
- <Category id="122701">
<Name>MP3-afspillere & Multimedieafspillere</Name>
</Category>
</Offer>
</Product>
</Products>
- <Warnings>
<Warning>The "merchantId" parameter is not given. The default value "-1" is used.</Warning>
<Warning>The "logicalType" parameter is not given. The default value "and" is used.</Warning>
</Warnings>
</ProductSearch>

I hvilken kode skal jeg indsætte URL´en? XMLparser? XML javascript?

Virkelig på forhånd tak !
Avatar billede arne_v Ekspert
09. december 2010 - 14:59 #1
Du henter XML og konverterer til HTML.

Du kan starte med at beslutte om det skal goeres server side eller client side.
Avatar billede carstenandersen Nybegynder
09. december 2010 - 15:07 #2
Umiddelbart lige meget. Hvad er nemmest?
Avatar billede arne_v Ekspert
09. december 2010 - 18:00 #3
Nemmest...

Maaske client side med JavaScript som applyer noget XSLT.
Avatar billede carstenandersen Nybegynder
10. december 2010 - 00:02 #4
Ok, det har jeg umiddelbart ikke lige styr på ;-)

Har du noget kode, eller nogle links, hvor det konkret er beskrevet?
Avatar billede arne_v Ekspert
10. december 2010 - 03:03 #5
Der er masser. F.eks.:
  http://www.w3schools.com/xsl/
Avatar billede carstenandersen Nybegynder
10. december 2010 - 10:40 #6
Kan godt se tankegangen og mulighederne i XML osv., men i mit konkrete tilfælde skal diverse data hentes ud fra en URL og ikke et .xml dokument. Test på sidstnævnte, altå et konkret .xml-dokument går godt, men kan ikke finde nogen kode, hvor oplysningerne kommer ind via en URL? Hvad gør jeg der?

Håber, at du kan følge min tankegang ;-)
Avatar billede arne_v Ekspert
10. december 2010 - 18:43 #7
Du kan sagtens hente data fra URL.
Avatar billede carstenandersen Nybegynder
10. december 2010 - 19:37 #8
Det lyder rigtig godt, men kan du ikke vise et eksempel? Jeg er lidt lost ;-) Jeg smider også gerne nogle flere point, hvis du kan hjælpe mig videre.
Avatar billede arne_v Ekspert
11. december 2010 - 03:43 #9
Hvad mangler du som ikke er i eksemplet:
  http://www.w3schools.com/xsl/xsl_client.asp
?
Avatar billede carstenandersen Nybegynder
11. december 2010 - 12:38 #10
Jeg har kigget godt på koderne og kan uden problemer få deres eksempel til at virke. I mit tilfælde, skal jeg så blot ændre:

1) xml=loadXMLDoc("productSearch.xml"); til xml=loadXMLDoc("minURL");?

2) Tilrette eksemplets cdcatalog.xsl?

Jeg har denne xml-kode:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProductSearch xmlns="urn:yahoo:prods">
    <Products firstResultPosition="1" totalResultsAvailable="4545" totalResultsReturned="2">
        <Product type="Offer">
            <Offer id="d2ba447c08db1b97059cfa270472b521">
                <Url>http://ecs-dk.kelkoo.dk/ctl/go/sitesearchGo?.ts=1292066522227&amp;.sig=7liUfavABQKl78GjGBKF906Kw.Y-&amp;offerId=d2ba447c08db1b97059cfa270472b521&amp;searchId=10769876_1292066522227_185021367&amp;affiliationId=xxxxxxxx&amp;country=dk&amp;wait=true&amp;ecs=ok&amp;contextLevel=1&amp;merchantid=7484723&amp;comId=7484723&amp;catId=122701</Url>
                <CompareUrl>http://www.kelkoo.dk/p-mp3afspillere-multimedieafspillere-122701/apple-ipod-touch-8-gb-anden-generation-19583165?partnerId=xxxxxxxx</CompareUrl>
                <ProductName>Apple iPod touch 8GB</ProductName>
                <Price currency="dkk">1769.00</Price>
                <DeliveryCost>0</DeliveryCost>
                <DeliveryTime>2-4 dage</DeliveryTime>
                <Availability>Lagerstatus: PÃ¥ lager</Availability>
                <Used>false</Used>
                <ListImage>
                    <Url>http://r.kelkoo.com/r/dk/7484723/122701/90/90/http%3A%2F%2Fsites.wupti.com%2FuploadedPictures%2FTouch_1.jpg/4jx_52FgGHUGblp6HDbgJDINRzqbOjmOMTkC4lO5RlM-</Url>
                    <Height>90</Height>
                    <Width>90</Width>
                </ListImage>
                <GridImage>
                    <Url>http://r.kelkoo.com/r/dk/7484723/122701/90/90/http%3A%2F%2Fsites.wupti.com%2FuploadedPictures%2FTouch_1.jpg/4jx_52FgGHUGblp6HDbgJDINRzqbOjmOMTkC4lO5RlM-</Url>
                    <Height>90</Height>
                    <Width>90</Width>
                </GridImage>
                <Summary>FaceTime Retina skærm HD-optagelser</Summary>
                <Merchant id="7484723">
                    <Name>Wupti.com</Name>
                </Merchant>
                <CatalogID>122701-19583165</CatalogID>
                <Category id="122701">
                    <Name>MP3-afspillere &amp; Multimedieafspillere</Name>
                </Category>
            </Offer>
        </Product>
        <Product type="Offer">
            <Offer id="51c590403a27b3797ebeb07694fa1d42">
                <Url>http://ecs-dk.kelkoo.dk/ctl/go/sitesearchGo?.ts=1292066522228&amp;.sig=f0PaLNnlXd6aoRuQc5MHhRoC8Us-&amp;offerId=51c590403a27b3797ebeb07694fa1d42&amp;searchId=10769876_1292066522227_185021367&amp;affiliationId=xxxxxxxx&amp;country=dk&amp;wait=true&amp;ecs=ok&amp;contextLevel=1&amp;merchantid=3322701&amp;comId=3322701&amp;catId=122701</Url>
                <CompareUrl>http://www.kelkoo.dk/p-mp3afspillere-multimedieafspillere-122701/apple-ipod-shuffle-1-gb-forste-generation-hvid-12461560?partnerId=xxxxxxxx</CompareUrl>
                <ProductName>Apple iPod Shuffle 2Gb rosa (New) .</ProductName>
                <Price currency="dkk">449.00</Price>
                <DeliveryCost>47.9</DeliveryCost>
                <DeliveryTime>1 uge</DeliveryTime>
                <Availability>Lagerstatus: PÃ¥ lager</Availability>
                <Used>false</Used>
                <ListImage>
                    <Url>http://r.kelkoo.com/r/dk/3322701/122701/90/90/http%3A%2F%2Fmedia.redcatsnordic.com%2Fellos%2Fimages%2Fproducts%2Fthumb_list%2F71-50%2F71-5039.jpg/U7MKenu0TeLwuti8nk3jWPpyx6tUpjSQYupzmMvNIkE-</Url>
                    <Height>90</Height>
                    <Width>90</Width>
                </ListImage>
                <GridImage>
                    <Url>http://r.kelkoo.com/r/dk/3322701/122701/90/90/http%3A%2F%2Fmedia.redcatsnordic.com%2Fellos%2Fimages%2Fproducts%2Fthumb_list%2F71-50%2F71-5039.jpg/U7MKenu0TeLwuti8nk3jWPpyx6tUpjSQYupzmMvNIkE-</Url>
                    <Height>90</Height>
                    <Width>90</Width>
                </GridImage>
                <Summary>Apple samler al den bedste teknik i den nye iPod Shuffle. Aluminiumcoveret og den flotte finish i läkre, trendy farver gör desuden den nye iPod Shuffle til en hot modeaccessorie.</Summary>
                <Merchant id="3322701">
                    <Name>Ellos</Name>
                </Merchant>
                <CatalogID>122701-12461560</CatalogID>
                <Category id="122701">
                    <Name>MP3-afspillere &amp; Multimedieafspillere</Name>
                </Category>
            </Offer>
        </Product>
    </Products>
    <Warnings>
        <Warning>The "merchantId" parameter is not given. The default value "-1" is used.</Warning>
        <Warning>The "logicalType" parameter is not given. The default value "and" is used.</Warning>
    </Warnings>
</ProductSearch>

Hvad hedder "stien" i <xsl:for-each select="????/????">

Virkelig på forhånd tak. Fået vi løst udfordringen, fordobler jeg gerne pointene.
Avatar billede arne_v Ekspert
11. december 2010 - 22:02 #11
Du skal tilrette navnet på XML filen (jeg mener at den selv konstruerer URL udfra HTML URL og navn på XML fil).
Avatar billede arne_v Ekspert
11. december 2010 - 22:04 #12
select er en XPath, hvor du skal adressere dig ned i XML dokumentet.

//yderstetag/naestetag/naesteigen
Avatar billede carstenandersen Nybegynder
12. december 2010 - 07:17 #13
Er nok ikke helt med på den omkring URL? Min URL ligner:

http://dk.shoppingapis.kelkoo.com/V2/productSearch?query=ipod&sort=default_ranking&start=1&results=1&show_products=1&show_subcategories=0&show_refinements=0&aid=xxxxxx×tamp=1291902109&hash=96ZS6wyY_QlxTGpNzN7G1Q--

skal xml=loadXMLDoc("minURL"); så rettet til:

xml=loadXMLDoc("http://dk.shoppingapis.kelkoo.com/V2/productSearch?query=ipod&sort=default_ranking&start=1&results=1&show_products=1&show_subcategories=0&show_refinements=0&aid=xxxxxx×tamp=1291902109&hash=96ZS6wyY_QlxTGpNzN7G1Q--
");?

I forhold til XPath er jeg med på, at jeg skal adressere mig ned i XML dokumentet, men jeg er i tvivl om, hvordan adresseringen skal være, da XML dokumentet indeholder "værdier", f.eks. type="offer"? Når jeg f.eks. har:

<ProductSearch xmlns="urn:yahoo:prods">
    <Products firstResultPosition="1" totalResultsAvailable="4545" totalResultsReturned="2">
        <Product type="Offer">
            <Offer id="d2ba447c08db1b97059cfa270472b521">
                <Url>

hvordan ser <xsl:for-each select="ProductSearch xmlns="???"så ud?

Tak for din tålmodighed ;-)
Avatar billede arne_v Ekspert
12. december 2010 - 23:04 #14
Så vidt jeg husker tillader JavaScripts sikkerheds model ikke at man kalder noget far andre sites end der hvor JavaScript er hentet.
Avatar billede carstenandersen Nybegynder
13. december 2010 - 08:50 #15
Det med den eksterne URL har jo været "problemet" i selve spørgsmålet, så vi har arbejdet forgæves i en bestemt retning, men pyt med det. Hvordan kan det så løses?
Avatar billede arne_v Ekspert
14. december 2010 - 03:24 #16
Det synes jeg så ikke fremgår af spørgsmålet.

Er der andre problem stillinger som man skal være opmærksom på inden man bruger mere tid på spørgsmålet?
Avatar billede carstenandersen Nybegynder
14. december 2010 - 06:51 #17
OK. Jeg valgte netop at skrive, at det var vedr. Kelkoo API og vise et eks. på en URL, hvoraf deres navn også fremgår, men beklager, hvis jeg ikke har formuleret mig tydeligt nok.

Derudover skulle der ikke være andre specielle problemstillinger. Deres URL danner indholdet af et XML-dokument, se eks. i spørgsmålet, og det er dette indhold, som jeg gerne vil have vist i HTML i stedet for XML. Der dannes en ny URL, hver gang siden kaldes.
Avatar billede arne_v Ekspert
15. december 2010 - 03:40 #18
Du gav URL, men jeg kunne ikke lige gætte at det var en ekstern URL.

Når det er det skal du hente server side, applye XSL og outputt resultatet.

ASP/VB snippet:

Set xmldoc = CreateObject("Msxml.DOMDocument")
xmldoc.Async = false
xmldoc.Load(Server.MapPath(xmlurl))
Set xsldoc = CreateObject("Msxml.DOMDocument")
xsldoc.Async = false
xsldoc.Load(Server.MapPath("ditstylesheet.xsl"))
Response.Write xmldoc.TransformNode(xsldoc)
Avatar billede carstenandersen Nybegynder
15. december 2010 - 12:28 #19
Nu har jeg arbejdet på det i flere timer, men stadig ikke kommet videre. Hvis jeg ændrer xmldoc.Load(Server.MapPath(xmlurl)) til xmldoc.Load("URL") er koden umiddelbart ok, men har rigtig svært ved at få udformet indholdet af .xsl-filen.

Forsøgt at finde en masse information, og fandt i den forbindelse din guide, http://www.eksperten.dk/guide/1264, hvor jeg har prøvet at lave dit eksempel under "XSLT", men her fejlede den:

Microsoft VBScript runtime error '800a01a8'

Object required: ''

/xslt.asp, line 9

Linie 9 er: xml.Async = Falsexml.Load(Server.MapPath("test.xml"))

Skal der være noget specielt installeret på serveren?
Hvordan ser .xsl-filen ud i forhold til mit xml (se mit indlæg fra lør. d. 11. december 2010 kl. 12:38:29)?
Avatar billede carstenandersen Nybegynder
15. december 2010 - 13:15 #20
Jeg har endvidere lige arbejdet med http://www.w3schools.com/xsl/xsl_server.asp. Deres eksempel virker fint, men ikke hvis jeg forsøger at kalde .xml-filen ud fra en URL. Har ændret xml.load(Server.MapPath("cdcatalog.xml")) til både:

doc.Load("http://www.xxxxxxxxx.dk/cdcatalog.xml")
xml.Load("http://www.xxxxxxxxx.dk/cdcatalog.xml")

men intet virker. Hvordan ændres load.funktionen, så den kalder ud fra URL?
Avatar billede arne_v Ekspert
28. december 2010 - 01:29 #21
Set xml = CreateObject("MSXML.DOMDocument")
xml.Async = False
xml.Load(url)

bør virke fint.
Avatar billede carstenandersen Nybegynder
28. december 2010 - 15:07 #22
Denne kode:

<%
'Load XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("cdcatalog.xml"))

'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("cdcatalog.xsl"))

'Transform file
Response.Write(xml.transformNode(xsl))
%>

virker helt perfekt, men hvis jeg ændrer koden til dit forslag:

<%
'Load XML
Set xml = CreateObject("MSXML.DOMDocument")
xml.Async = False
xml.Load("http://www.mitdomæne.dk/cdcatalog.xml")

'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("cdcatalog.xsl"))

'Transform file
Response.Write(xml.transformNode(xsl))
%>

virker det ikke. Hvad gør jeg forkert?
Avatar billede arne_v Ekspert
28. december 2010 - 18:04 #23
Hvilken linie giver fejl?
Avatar billede carstenandersen Nybegynder
28. december 2010 - 23:00 #24
Den kommer som sådan ikke en fejlmeddelelse, men indholdet af "cd-katalaloget" vises blot ikke. Der står kun overskrifterne, men ikke de enkelte cd´ere?
Avatar billede arne_v Ekspert
28. december 2010 - 23:06 #25
Tyder det ikke på at VBS koden er OK men at XSL'en er forkert?
Avatar billede carstenandersen Nybegynder
29. december 2010 - 10:16 #26
Umiddelbart jo, men XSL-koden er taget fra eksemplet på http://www.w3schools.com/xsl/xsl_server.asp og virker jo helt fint, hvis der kaldes med xml.load(Server.MapPath("cdcatalog.xml")). Virker ikke, hvis der i stedet kaldes med URL, xml.Load("http://www.mitdomæne.dk/cdcatalog.xml").

Skal koden til load af XSL:

'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("cdcatalog.xsl"))

også ændres?
Avatar billede carstenandersen Nybegynder
12. januar 2011 - 11:34 #27
Jeg har læst et andet sted, at problemet måske kan være, at serveren ikke accepterer load af dokument fra eksterns URL. Men uanset hvad, så har jeg besluttet at gøre det på en helt anden måde.

Arne_v, smid derfor et svar, og du får alle point som tak for din hjælp.
Avatar billede arne_v Ekspert
03. marts 2011 - 04:05 #28
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