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

dotcom1
dotcom1 (18.804 point. Point ude: 60)

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 (18.804 point)
Hmm, ingen der kan hjælpe? Jeg lukker indtil videre...

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

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

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

dotcom1
dotcom1 (18.804 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/ (...)
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 (36.230 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 (36.230 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 (18.804 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 (36.230 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 (18.804 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 (36.230 point)
ja, send til min email og ikke msn :)

/J

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

jokkejensen
jokkejensen (36.230 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 (18.804 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 (36.230 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/ (...)
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 (18.804 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/ (...)
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/ (...)
<html xmlns="http://www.w3.org/ (...)
<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/ (...));
xsl=loadXMLDoc("http://link.to/ (...));
// 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 (18.804 point)
Hej.

Jeg har oprettet et spørgsmål til dig her: http://www.eksperten.dk/ (...) 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

Benytte XSLT til tranformering af data imellem 2 systemer

Oprettet den 8. december 2011 kl. 11.52
bongo13 giver 60 point for svar | Giv et svar »

fo:block kollapser

Oprettet den 14. november 2011 kl. 11.16
schristensen giver 200 point for svar | Giv et svar »

Select i Xpath, ignorere case

Oprettet den 20. oktober 2011 kl. 00.01
wise giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Genial Android-app hjælper dig til bedre Wi-Fi

Hvis du bor i et område, der er oversået med trådløse netværk, kan det være svært at finde den mindst trafikkerede kanal til din trådløse router. Vi guider dig til en smartphone-app til Android,...


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Her er 30 suveræne tips til din pc

Det er nemt at få din computer tilbage i topform. Vi er klar med en PDF, hvor vi har samlet 30 af de bedste tips fra pcworld.dk. Her får du hjælp og grundig vejledning til at forbedre din pc markant.


Nyheder fra Computerworld

Teaser billede

Halv NemID-løsning i bankerne vækker bekymring

Banker, der giver kunderne mulighed for logge på netbanken uden brug af NemID, spiller højt spil med sikkerheden.


Kurser
Samarbejdspartnere

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