Avatar billede thomas_regin Nybegynder
30. marts 2004 - 13:01 Der er 3 kommentarer og
1 løsning

for-each loop logik, eller manglen på samme!

Hejsa!

Jeg har et XML-doc, der ser således ud i en stærkt beskåret udgave:

<?xml version="1.0" encoding="utf-8" ?>
<survey name="Online Survey">
<question title="How would you rate my website?">
        <rowselect title="Site Design">
            <option type="radio" name="dontknow" value="I don't know" />
            <option type="radio" name="designbad" value="Bad" />
        </rowselect>
        <rowselect title="Site Navigation">
            <option type="radio" name="navdontknow" value="I don't know" />
            <option type="radio" name="navdif" value="Difficult to navigate" />
        </rowselect>
    </question>
</survey>

Jeg vil gerne have at outputtet af dette kommer til at stå således:

How would you rate my website:
Site Design
  1. I Don't know
  2. Bad

Navigation
  1. I don't know
  2. Difficult to navigate

Dette skal kunne gøres i ét loop. Derfor har jeg lavet et XSLT, som ser således ud (stærkt beskåret):

<xsl:for-each select="//question/rowselect">
            <tr>
                <td>
                    <table>
                        <tr>
                            <td>
                                <i><xsl:value-of select="@title" /></i>
                            </td>
                        </tr>
                        <tr>
                            <xsl:for-each select="//question/rowselect/option">
                                <td>
                                    <xsl:if test="@type='text'">
                                        <asp:TextBox id="{@name}" runat="server" />                                       
                                    </xsl:if>
                                    <xsl:if test="@type='radio'">
                                        <asp:RadioButtonList id="{@name}" runat="server">
                                        <asp:ListItem Value="{@value}">
                                        <xsl:value-of select="@value" />
                                        </asp:ListItem>
                                        </asp:RadioButtonList>
                                    </xsl:if>
                                </td>
                            </xsl:for-each>
                        </tr>
                    </table>
                </td>
            </tr>
            </xsl:for-each>

Problemet er, at denne looper igennem alle //question/rowselect/option (altså svarene) 2 gange, således, at outputtet ser således ud:

- How would you rate my website?
Site Design 
  I don't know
  Bad
  I don't know
  Difficult to navigate

Site Navigation 
  I don't know
  Bad
  I don't know
  Difficult to navigate

Altså svarene fra de 2 spørgsmål kommer med i begge spørgsmål! Jeg kan godt se hvorfor dette sker, men hvordan retter jeg det, således, at jeg 2. for-each loop kun henter data, som tilhører <ROWSELECT> nummer 2 ??

På forhånd tak for hjælpen. Jeg håber spørgsmålet er forstået! :)

Thomas Regin.
Avatar billede atoft Nybegynder
30. marts 2004 - 13:04 #1
Du skal blot lave den inderste for-each om til

<xsl:for-each select="option">
Avatar billede thomas_regin Nybegynder
30. marts 2004 - 13:07 #2
Ha ha ha ha ha ha ha ha ha ha ha!!!!!!!!!!!!!!!!!!!!!!!!!!

For pokker da også!.. :)

Mange tak!!.. Smid lige et svar, mens jeg banker mit hovedet mod væggen!! :)

Thomas
Avatar billede atoft Nybegynder
30. marts 2004 - 13:08 #3
Det skal du fordi du allerede i yderste for-each får sat currentnode til den actuelle rowselect og det er kun i kontext af denne du ønske dine options. Ved at skrive // starter du helt fra root igen og det du ønsker er jo faktisk kun at søge under din currentnode.

Hvis du kommer i tvivl om hvad din currentnode indeholder kan den altid refereres med . (punktum)
Avatar billede thomas_regin Nybegynder
30. marts 2004 - 13:10 #4
Ja, du har helt ret!.. Man lærer noget nyt hver dag! :)

Jeg takker mange gange!

Thomas.
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