Avatar billede altinet Nybegynder
28. marts 2001 - 10:48 Der er 6 kommentarer og
1 løsning

Sammenligne værdi med en der ikke er skrevet, nextSibling??

Hey,

Jeg har et problem med et XML dokument som jeg skal have transformeret til en tabel i HTML.
XML\'en består af en række data, som sætvis repræsenterer en \"log entry\".

eksempel data:

<LOG>
  <LOGLINE>
    <ID>6</ID>
    <AJOURDATO>14-03-01</AJOURDATO>
    <STATUS>Passiv</STATUS>
    <RATE>J</RATE>
    <SAGSBEH>LXP</SAGSBEH>
  </LOGLINE>
  <LOGLINE>
    <ID>5</ID>
    <AJOURDATO>01-03-01</AJOURDATO>
    <STATUS>Aktiv</STATUS>
    <RATE>J</RATE>
    <SAGSBEH>LXP</SAGSBEH>
  </LOGLINE>
  <LOGLINE>
    <ID>4</ID>
    <AJOURDATO>20-02-01</AJOURDATO>
    <STATUS>Aktiv</STATUS>
    <RATE>N</RATE>
    <SAGSBEH>LXP</SAGSBEH>
  </LOGLINE>
  <LOGLINE>
    <ID>3</ID>
    <AJOURDATO>12-02-01</AJOURDATO>
    <STATUS>Passiv</STATUS>
    <RATE>N</RATE>
    <SAGSBEH>LXP</SAGSBEH>
  </LOGLINE>
  <LOGLINE>
    <ID>2</ID>
    <AJOURDATO>01-12-00</AJOURDATO>
    <STATUS>Passiv</STATUS>
    <RATE>J</RATE>
    <SAGSBEH>LXP</SAGSBEH>
  </LOGLINE>
  <LOGLINE>
    <ID>1</ID>
    <AJOURDATO>14-07-00</AJOURDATO>
    <STATUS>Aktiv</STATUS>
    <RATE>J</RATE>
    <SAGSBEH>LXP</SAGSBEH>
  </LOGLINE>

</LOG>


Hver log entry skal vises på en linie i en tabel, i omvendt kronologisk rækkefølge, således at den seneste står øverst.
Samtidig skal data i hver enkelt log entry sammenlignes med den foregående, KRONOLOGISK, således at data der er magen til det tilsvarende felt i den foregående logentry, vises \"nedtonet\", helst med brug af \"disabled\" attributten.
Eksempel:

7.logentry: <STATUS>Aktiv</STATUS> Skal vises med normal visning
6.logentry: <STATUS>Passiv</STATUS> Skal vises nedtonet (er ikke ændret siden sidste logentry)
5.logentry: <STATUS>Passiv</STATUS> Skal vises nedtonet (er ikke ændret siden sidste logentry)
4.logentry: <STATUS>Passiv</STATUS> Skal vises med normal visning
3.logentry: <STATUS>Aktiv</STATUS> Skal vises nedtonet (er ikke ændret siden sidste logentry)
2.logentry: <STATUS>Aktiv</STATUS> Skal vises nedtonet (er ikke ændret siden sidste logentry)
1.logentry: <STATUS>Aktiv</STATUS> Skal vises med normal visning

HTML tabellen skal dannes noget i retning af..

<xsl:for-each select=\"LOG/LOGLINE\" order-by=\"-ID\" >
    <tr>
      <td nowrap=\"yes\"><xsl:for-each select=\"ID\" ><xsl:eval>checkValue(this)</xsl:eval></xsl:for-each></td>
          <td nowrap=\"yes\"><xsl:for-each select=\"AJOURDATO\" ><xsl:eval>checkValue(this)</xsl:eval></xsl:for-each></td>
          <td nowrap=\"yes\"><xsl:for-each select=\"STATUS\" ><xsl:eval>checkValue(this)</xsl:eval></xsl:for-each></td>
          <td nowrap=\"yes\"><xsl:for-each select=\"RATE\" ><xsl:eval>checkValue(this)</xsl:eval></xsl:for-each></td>
          <td nowrap=\"yes\"><xsl:for-each select=\"SAGSBEH\" ><xsl:eval>checkValue(this)</xsl:eval></xsl:for-each></td>
    </tr>
</xsl:for-each>

..hvor checkValue(this) er et funktionskald der checker værdien i forhold til den tilsvarende værdi i kronologisk foregående (men tabelmæssigt efterfølgende) logentry.

1: Hvordan udpeger jeg (og finder værdien) i en node der ikke er \"dannet\" når funktionen udføres? (Jeg er inde på noget emd parentNode.nextSibling.selectSingleNode(\"feltnavn\").nodeTypedValue, men jeg kan ikke få det til at funke.)
2: Hvordan giver jeg en værdi der skal vises nedtonet attributten \"disabled\" dynamisk?

Jeg håber inderligt der er nogen der kan hjælpe!!!

:-) Lars
Avatar billede nico26 Nybegynder
28. marts 2001 - 23:04 #1
prøv det her:

<?xml version=\"1.0\"?>
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">
  <xsl:script>
    <![CDATA[

      function check(oNode) {
        var rslt = false;
        var ns = oNode.nextSibling;

        if (ns != null) {
          var s1 = oNode.childNodes.item(2).text;
          var s2 = ns.childNodes.item(2).text;
          if (s1 == s2) rslt = true;
        }
        return rslt;
      }

    ]]>
  </xsl:script>
  <xsl:template match=\"/\">
    <html>
      <head>
        <title>Log</title>
      </head>

      <body>
        <table align=\"center\" border=\"2\">
          <tr>
            <th>ID</th>
            <th>AJOURDATO</th>
            <th>STATUS</th>
            <th>RATE</th>
            <th>SAGSBEH</th>
          </tr>
          <xsl:for-each order-by=\"- ID\" select=\"LOG/LOGLINE\">
            <tr>
              <td nowrap=\"yes\"><xsl:value-of select=\"ID\"/></td>
              <td nowrap=\"yes\"><xsl:value-of select=\"AJOURDATO\"/></td>
              <td nowrap=\"yes\">
              <xsl:if expr=\"check(this)\">
                <xsl:attribute name=\"disabled\"/>
              </xsl:if>
              <xsl:value-of select=\"STATUS\"/></td>
              <td nowrap=\"yes\"><xsl:value-of select=\"RATE\"/></td>
              <td nowrap=\"yes\"><xsl:value-of select=\"SAGSBEH\"/></td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

/nico
Avatar billede altinet Nybegynder
29. marts 2001 - 08:42 #2
Jeg prøver..

:-) Lars
Avatar billede altinet Nybegynder
29. marts 2001 - 08:57 #3
Kanon!

:-) Lars

PS: hvorfor bruger du \"CDATA\" til at omkranse xsl:script ??
Avatar billede nico26 Nybegynder
29. marts 2001 - 14:27 #4
ellers brokker den sig f.eks. ved > og < tegn
Avatar billede altinet Nybegynder
29. marts 2001 - 14:29 #5
Hmm..OK

:-) Lars
Avatar billede nico26 Nybegynder
29. marts 2001 - 15:14 #6
det er ikke noget problem i dette eksempel, men hvis der du havde stået: if (s1 < s2) rslt = true
og det ikke havde været i en CDATA sektion, ville der opstå en fejl, fordi parseren ville tro at er starten på et tag
Avatar billede altinet Nybegynder
29. marts 2001 - 15:43 #7
OK, så er jeg med...

:-) Lars
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