Avatar billede shadowsurfer Nybegynder
22. januar 2004 - 11:03 Der er 16 kommentarer og
3 løsninger

Undersøg om 2 af hinnanden efter følgende "id'er" er fortløbende

Hvordan undersøger man om 2 af hinnanden efterfølgende "id'ers" værdier er forløbende, for der efter kun vise dem der ikke er.

Jeg havde tænkt noget i retningen af trække den aktuelle fra den tidliger id og se om resultatet = 1.

Jeg kan bare ikke lige se hvordan jeg hender den tidligere id ind..

-----ex xml --------
<ex id=1>
<ex id=2>
<ex id=5>
<ex id=6>
<ex id=8>
-----ex output -------
5
8
--------------------
Det vil også være ok hvis den første id kom med, da den jo ikke er forløbende for den tidligere med en ny start.
Avatar billede shadowsurfer Nybegynder
22. januar 2004 - 11:07 #1
entlig burde ex xml'en være:
-----ex xml --------
<ex id=1>dfgcuk</ex>
<ex id=2>regtr</ex>
<ex id=5>fsdgr</ex>
<ex id=6>ertgt</ex>
<ex id=8>erg</ex>
----
Men det gør vel ikke nogen forskel?
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 11:14 #2
Jeg ville arbejde på noget i retning af @id og preceding::@id
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 11:17 #3
eller måske following::@id i stedet
Avatar billede shadowsurfer Nybegynder
22. januar 2004 - 11:28 #4
Begge dele få mozilla til dø... jeg prøve preceding(@id) hvilket gav:preceding not implemented.
Avatar billede shadowsurfer Nybegynder
22. januar 2004 - 11:30 #5
following(@id) giver: following not implemented
Avatar billede Slettet bruger
22. januar 2004 - 12:39 #6
Prøv evt. noget ala det her:

<xsl:if test="@id = (following-sibling::ex[1]/@id - 1)">
  Den næste er een større end mig
</xsl:if>

/CS
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 12:52 #7
skal det ikke snarre være
<xsl:if test="@id = (number(following-sibling::ex[1]/@id) - 1)">
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 12:54 #8
Dette stylesheet skulle kunne gøre det...

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="ISO-8859-1"/>
    <xsl:template match="ex">
        <xsl:if test="not(@id = (number(following::ex/@id)-1))">
        <xsl:value-of select="@id"/>
        </xsl:if>
    </xsl:template>
    <xsl:template match="text() | @*"/>
</xsl:stylesheet>
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 12:55 #9
Det skulle vel egentlig have været et svar
Avatar billede Slettet bruger
22. januar 2004 - 14:00 #10
Min test virker nu også fint efter hensigten.

/CS
Avatar billede Slettet bruger
22. januar 2004 - 14:03 #11
Prøv f.eks. :

<?xml version="1.0"?>
<x:stylesheet version="1.0" xmlns:x="http://www.w3.org/1999/XSL/Transform">

<x:template match="ex">
<p>
<b><x:value-of select="." /></b>
<x:if test="@id = (following-sibling::ex[1]/@id - 1)">
    (Den naeste er een stoerre end mig)
</x:if>
</p>
</x:template>
</x:stylesheet>

Med disse data (har bare quote'ed attributterne og wrappet elementerne i et <root> element):
<?xml version="1.0"?>
<root>
<ex id="1">dfgcuk</ex>
<ex id="2">regtr</ex>
<ex id="5">fsdgr</ex>
<ex id="6">ertgt</ex>
<ex id="8">erg</ex>
</root>

/CS
Avatar billede shadowsurfer Nybegynder
22. januar 2004 - 15:03 #12
Undskyld hvis jeg virker lidt grøn i kanten, man jeg startede på XSLT i går.

Jeg kan ikke helt få det til at virker efter hinsigten. Jeg er jo nok nød til at bruge preceding i stedet få, da id'en jo skal vises hvis den ikke er det efterfølgende nummer til det tidligere.

Som XSLT'en er nu viser den alle talene ude til højere (Der hvor filteringen sker) for id2, pånær 2.

De tal jeg gerne vil havde ud er:
120
344
700
875
Og ingen andre, de første tal på hver side er dog ok (det vil her sige: 1, 346, 703), ser dog helst disse tal ikke vises.




Det konkrete tilfælde jeg arbejder på er:
----------- XML file ------------
?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<TEI.2>

<side id="153v">
<l id="1" id2="1"><initial>Ie</initial>th * lidh<forkortelse>et</forkortelse> spel acth<forkortelse>e</forkortelse>r jech ath skriwe</l>
<l id="2" id2="2">th<forkortelse>e</forkortelse>r man maa tidh<forkortelse>e</forkortelse>n m<forkortelse>edh</forkortelse> for driwe</l>

<l id="3" id2="120">om nog<forkortelse>e</forkortelse>r vndh<forkortelse>e</forkortelse>r i fordom skieddæ</l>
<l id="4" id2="121">th<forkortelse>et</forkortelse> hws otte jen ko<forkortelse>n</forkortelse>ni<forkortelse>n</forkortelse>g rig</l>
<l id="5" id2="344">sterke dyderik aff bærne han kalled seg</l>

<l id="6" id2="345">han tog th<forkortelse>et</forkortelse> wel til take m<forkortelse>edh</forkortelse> æræ</l>
</side>

<side id="162v">
<l id="7" id2="346">i hwilke lwnde som th<forkortelse>et</forkortelse> skulde weræ</l>
<l id="8" id2="347">han støtte didrik m<forkortelse>edh</forkortelse> glawinde i hand</l>

<l id="9" id2="348">widrik och han haffde a<forkortelse>n</forkortelse>net befwndh<forkortelse>et</forkortelse></l>
<l id="10" id2="700">førræ the haffde ko<forkortelse>m</forkortelse>med aff hans land</l>
<l id="11" id2="701">for the haffde ha<forkortelse>nu</forkortelse>m brot i mood</l>
<l id="12" id2="702">th<forkortelse>et</forkortelse> haffde wered th<forkortelse>e</forkortelse>m jen stor v æræ</l>

</side>

<side id="164v">
<l id="13" id2="703">the matte saa gierne hawe * hie<forkortelse>m</forkortelse>me wæræd</l>
<l id="14" id2="704">didrik som war howmod</l>
<l id="15" id2="875">th<forkortelse>e</forkortelse>r til seye wi allæ amen</l>

</side>
</TEI.2>

-------- XSLT file ------------
<xsl:stylesheet version="1.0">
<xsl:template match="/">
<html>
<head>
<title>
TEST
</title>
</head>
<body>
<h2>TEST</h2>
<table bgcolor="#eeeeee">
<xsl:for-each select="TEI.2/side">
<tr>
  <th bgcolor="#aaaabb">Normal</th>
  <th bgcolor="#bbbbaa">Brandt</th>
  <th bgcolor="#aaaaaa" colspan="2">Side: <xsl:value-of select="@id"/></th>
</tr>
<xsl:for-each select="l">
  <tr>
  <xsl:choose>
    <xsl:when test="@id mod 5 = 0">
    <td bgcolor="#aaaabb"><xsl:value-of select="@id"/></td>
    </xsl:when>
    <xsl:when test="@id mod 5 != 0">
    <td bgcolor="#aaaabb"/></td>
    </xsl:when>
  </xsl:choose>
  <xsl:choose>
    <xsl:when test="@id2 mod 5 = 0">
    <td bgcolor="#9999ff"><xsl:value-of select="@id2"/></td>
    </xsl:when>
    <xsl:when test="@id2 mod 5 != 0">
    <td bgcolor="#bbbbaa"><xsl:value-of select="@id2"/></td>
    </xsl:when>
  </xsl:choose>
  <td bgcolor="#fefefe"><xsl:value-of select="."/></td>
  <xsl:if test="not(@id2 = (number(preceding::l/@id2)+1))">
    <td><xsl:value-of select="@id2"/></td>
  </xsl:if>
  </tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Avatar billede Slettet bruger
22. januar 2004 - 20:25 #13
Ret din xsl:if til:
  <xsl:if test="not(@id2 = (number(preceding::l[1]/@id2)+1))">

- og så er der en enkelt "typo" (som XML parseren brokker sig over):
  <td bgcolor="#aaaabb"/></td>
skal være:
  <td bgcolor="#aaaabb"></td>

/CS
Avatar billede shadowsurfer Nybegynder
24. januar 2004 - 12:28 #14
Mange tak begge 2.
60 til greystate,for den endeligløsning
30 til thor.ostergaard
Avatar billede thor.ostergaard Nybegynder
24. januar 2004 - 12:33 #15
Jeg syntes du skal skyde alle dine points efter greystate - det var ikke mange minutter jeg brugte på sagen.
Avatar billede shadowsurfer Nybegynder
24. januar 2004 - 12:47 #16
Hvad betyder [1] entlig?
Avatar billede shadowsurfer Nybegynder
24. januar 2004 - 12:50 #17
Man kan åbenbart ikke give flere point en afsat til spm... Det kunne man engang...
Avatar billede Slettet bruger
24. januar 2004 - 12:54 #18
"preceding::" er det der kaldes en "axis", som bestemmer hvor der skal ledes efter matchende elementer - da den returnerer alle der matcher, er det vigtigt kun at bede om den første, hvilket er det [1] betyder.

Man kunne evt. oversætte det til flg. vejviser:

- Gå ud af "preceeding vej", tag første "l" der ligger på vejen, og se dens "id2"

/CS
Avatar billede shadowsurfer Nybegynder
24. januar 2004 - 12:59 #19
tak!

Jeg skulle jo også gerne lære noget af det har ;-)
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