Oprettet tor. d. 10. december 2009 kl. 11:31:01

dotcom1
dotcom1 (16.494 point. Point ude: 0)

Selectbox med data fra xml

Hej.

Jeg har et xml-feed med f.eks følgende data:

<Categories>
<Item type="position-type" id="13059">Type 1</Item>
<Item type="position-type" id="13060">Type 2</Item>
<Item type="duration" id="permanent">Fast</Item>
<Item type="extent" id="fulltime">Heltid</Item>
<Item type="operating-time" id="day">Dag</Item>
</Categories>

Jeg vil gerne lave en selectbox med f.eks. alle forekomster af position-type.

Har bl.a. skrevet dette - ved ikke om jeg er på rette vej:

<form name="my_search" action="/index.html" method="post">
  <input type="hidden" name="iso" value="dk" />
    <select class="combo" name="cat" id="cat">
    <option value="0" selected="selected">--</option>
    <xsl:for-each select="ns:Versions/ns:Version/ns:Categories/ns:Item"/>
    <option value="position()"><xsl:value-of select="position()"/></option>
    </xsl:for-each>
    </select>
    </form>

- men hvordan får jeg fat i typen og id'et?

Håber nogen kan hjælpe.

På forhånd tak.

Skrevet tor. d. 17. december 2009 kl. 12:17:19| #1

dotcom1
dotcom1 (16.494 point)
Hmm, ingen der kan hjælpe? Jeg lukker indtil videre...

Skrevet tir. d. 25. maj 2010 kl. 10:42:02| #2

jokkejensen
jokkejensen (28.418 point)
<option value="{@id}"><xsl:value-of select="@type"/></option>

Skrevet tir. d. 25. maj 2010 kl. 13:43:12| #3

dotcom1
dotcom1 (16.494 point)
Hej.

Havde helt glemt dette spørgsmål, som aldrig blev løst. :) Jeg har prøvet dit forslag, men får blank skærm og følgende fejl:

Fejl: malplaceret mærke. Forventede: </select>.
Kildefil: http://mydomain.com/files/style.xsl
Linje: 15, Kolonne: 7
Kildekode: </xsl:for-each>

Min kode ser således ud:

<form name="my_search" action="/index.html" method="post">
<input type="hidden" name="iso" value="dk" />
<select class="combo" name="cat" id="cat">
<xsl:for-each select="ns:Versions/ns:Version/ns:Categories/ns:Item"/>
<option value="{@id}"><xsl:value-of select="@type"/></option>
</xsl:for-each>
</select>
</form>

Skrevet tir. d. 25. maj 2010 kl. 13:59:24| #4

jokkejensen
jokkejensen (28.418 point)
du har også lukket den for-each forkert.

Jeg kopierede bare :)

/J

Skrevet tir. d. 25. maj 2010 kl. 13:59:58| #5

jokkejensen
jokkejensen (28.418 point)
<xsl:for-each select="ns:Versions/ns:Version/ns:Categories/ns:Item"/>

rettes til:

<xsl:for-each select="ns:Versions/ns:Version/ns:Categories/ns:Item">

Skrevet tir. d. 25. maj 2010 kl. 14:13:27| #6

dotcom1
dotcom1 (16.494 point)
Ok, beklager. :)

Ingen fejl nu, men der dukker ikke noget op i selectboxen:

<form name="my_search" action="/index.html" method="post">
<input type="hidden" name="iso" value="dk" />
<select class="combo" name="cat" id="cat">
<option value="0" selected="selected">--</option>
<xsl:for-each select="ns:Versions/ns:Version/ns:Categories/ns:Item">
<option value="{@id}"><xsl:value-of select="@type"/></option>
</xsl:for-each>
</select>
</form>


- så det er som om den ikke fanger indholdet i xml-feedet. Jeg går ud fra at du gerne vil se det rigtige xml-feed eller et link til min test?

Skrevet tir. d. 25. maj 2010 kl. 14:19:21| #7

jokkejensen
jokkejensen (28.418 point)
ja hvis du har det ?

Hvorfor bruger du de ns: namespace angivelser foran noder i xpathen ?

Vh.

Skrevet tir. d. 25. maj 2010 kl. 14:27:18| #8

dotcom1
dotcom1 (16.494 point)
Hmm, godt spørgsmål. Jeg har fundet nogle tutorials på nettet, som fik mig i gang. Det er nok bare dårlig stil så...

Jeg kan ikke rigtig vise min test offentligt, men jeg kan måske sende en mail til dig med et link i?

Mvh.

Skrevet tir. d. 25. maj 2010 kl. 14:32:25| #9

jokkejensen
jokkejensen (28.418 point)
ja, send til min email og ikke msn :)

/J

Skrevet tir. d. 25. maj 2010 kl. 15:06:38| #10

jokkejensen
jokkejensen (28.418 point)
<xsl:for-each select="//ns:Categories/ns:Item">
          <option value="{@id}"><xsl:value-of select="@type"/></option>
        </xsl:for-each>

Prøv den.

Bemærk at jeg vælger ALLE kategorier og deres items.

/J

Skrevet tir. d. 25. maj 2010 kl. 15:25:47| #11

dotcom1
dotcom1 (16.494 point)
Jep, så skete der noget. Hvis man nu vil udskrive teksten i hver option: <Item type="duration" id="permanent">Fast</Item> - i dette tilfælde "Fast"?

Det, jeg i virkeligheden gerne vil - i sidste ende - er at have 5 selectboxes defineret pr. type, som udskriver alle items inden for sin type:

<Categories>
<Item type="position-type" id="13059">Stillingstype 1</Item>
<Item type="job-level" id="13058">Type / niveau 1</Item>
<Item type="duration" id="permanent">Fast</Item>
<Item type="extent" id="fulltime">Heltid</Item>
<Item type="operating-time" id="day">Dag</Item>
</Categories>


Ovenstående ville resultere i 5 bokse: en med position-type, en med job-level, en med duration, en med extent og en med operating-time. Værdien af disse items kan variere.

Meningen er at man skal kunne sortere en liste ud fra disse værdier.

Håber det giver mening...

Skrevet man. d. 31. maj 2010 kl. 10:05:24| #12

jokkejensen
jokkejensen (28.418 point)
Prøv den her, det er for "duration"


<xsl:variable name="DurationItems">
                        <root>
                            <xsl:for-each select="//ns:Item[@type = 'duration']">
                                <xsl:copy-of select="."/>
                            </xsl:for-each>
                        </root>
                    </xsl:variable>
                    <select class="combo" name="duration" id="duration">
                        <xsl:for-each select="msxml:node-set($DurationItems)/root//node()[text() != '' and not(text()=preceding-sibling::node()/text())]">
                            <xsl:variable name="pos" select="position()"></xsl:variable>
                            <xsl:choose>
                                <xsl:when test="position() = 1">
                                    <option value="">
                                        Vælg
                                    </option>
                                </xsl:when>
                                <xsl:otherwise>
                                    <option value="{@id}">
                                        <xsl:value-of select="text()"/>
                                    </option>
                                </xsl:otherwise>
                            </xsl:choose>
                        </xsl:for-each>
                    </select>


Tilføj det her til toppen:


<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:msxml="urn:schemas-microsoft-com:xslt" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="urn:EasyCruit">

Du skal så lave for hver <select>

/J

Skrevet tir. d. 08. juni 2010 kl. 10:51:40| #13

dotcom1
dotcom1 (16.494 point)
Hej igen - og tusind tak for dit svar. Det virker i IE! Jeg får umiddelbart en blank side i Firefox og en fejl, der refererer til parseren:

Error: Component returned failure code: 0x8060000e [nsIXSLTProcessor.transformToFragment] = <unknown>
Source file: http://mydomain.com/jobliste.html
Line: 45, som er denne:  resultDocument = xsltProcessor.transformToFragment(xml,document);

Koden er:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="/files/scripts.js"></script>
<script type="text/javascript">
function loadXMLDoc(fname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject)
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation
&& document.implementation.createDocument)
  {
  xmlDoc=document.implementation.createDocument("","",null);
  }
else
  {
  alert('Your browser cannot handle this script');
  }
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}

function displayResult()
{
xml=loadXMLDoc("http://link.to/xmlfile.xml");
xsl=loadXMLDoc("http://link.to/xmlfile/style.xsl");
// code for IE
if (window.ActiveXObject)
  {
  ex=xml.transformNode(xsl);
  document.getElementById("example").innerHTML=ex;
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation
&& document.implementation.createDocument)
  {
  xsltProcessor=new XSLTProcessor();
  xsltProcessor.importStylesheet(xsl);
  resultDocument = xsltProcessor.transformToFragment(xml,document);
  document.getElementById("example").appendChild(resultDocument);
  }
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body class="index" onload="displayResult()">
<div id="example"></div>
</body>
</html>

Jeg prøver lige at se om jeg kan gennemskue at lave de andre selects. Hvordan skal en udfør-knap se ud?

Skrevet tor. d. 10. juni 2010 kl. 14:23:03| #14

dotcom1
dotcom1 (16.494 point)
Hej.

Jeg har oprettet et spørgsmål til dig her: http://www.eksperten.dk/spm/911790 så du kan få nogle velfortjente points. Jeg kan helt sikkert komme videre nu.

Mange tak for din hjælp.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

for-each - udelade og ignorere

Oprettet den 28. august 2010 kl. 16.10
brynil giver 100 point for svar | Giv et svar »

Fjern dubletter

Oprettet den 24. august 2010 kl. 09.48
agentjna giver 60 point for svar | Giv et svar »

Newbie - hjælp

Oprettet den 18. august 2010 kl. 09.59
agentjna giver 60 point for svar | Giv et svar »

Seneste guides

100% højde med CSS i alle browsere
XML
2 Ting du skal holde øje med





Tips & Tricks fra PC World

Teaser billede

Sådan udspionerer du Google

Søgegiganten Google ved uhyggeligt meget om dig. Med Google Alarm får du besked, hver gang der sendes oplysninger om dig til Googles servere.


Anmeldelser fra PC World

Teaser billede

Test: Smart GPS-ur til løb og cykelture

Garmins Forerunner 110 er en meget underholdende makker, uanset om du løber, kører mountainbike i skoven eller drøner rundt på rulleskøjter. Vi har testet det GPS-baserede motions-ur.


Seneste blogindlæg

Teaser billede

Kvittering og status

På Eksperten er der 914.000 spørgsmål. Af dem er 162.000 åbne spørgsmål hvor der ikke er et accepteret svar, selvom der ligger forslag til svar på 63.000 af dem. Mange af dem ligger mange år...


Nyheder fra PC World

Teaser billede

Samsung udfordrer iPad med toptunet Android-tablet

Syv tommer skærm, Googles mobile styresystem og en vægt på 380 gram. Samsung har afsløret detaljerne om Galaxy Tab, der er sydkoreanernes bud på en konkurrent til Apples iPad. Mød tablet-pc'en...


Nyheder fra Computerworld

Teaser billede

Her er de farligste job i teknologi-verdenen

Du risikerer både liv og helbred, hvis du arbejder med disse job i teknologisektoren.



Kurser
Samarbejdspartnere

Udgiver · © 2010 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301