[xpath] preceding van een attribuut

Pagina: 1
Acties:

  • Shook
  • Registratie: Februari 2001
  • Laatst online: 29-09-2024
Ik heb een xml document zoals deze:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<ROOT>
    <DIA>
        <KANUM>42201</KANUM>
        <KLEUR>N</KLEUR>
        <OMSC>Hals, F./Portretten/Mannen. Portret van Willem van Heythuysen. Zie ook dia D8685.</OMSC>
        <AFMETING>paneel:46.5x37.5cm.</AFMETING>
        <JAARTAL>1637-'39</JAARTAL>
        <VERBLKODE>V553</VERBLKODE>
        <VERBLIJF/>
        <DIANR>C2198</DIANR>
        <ARCHIEFNR/>
        <AUTEUR>Geschenk L. de Vries</AUTEUR>
        <TITEL/>
        <PL_UITG/>
        <JAAR_UITG/>
        <PAGINA/>
        <AFBEELDING/>
        <OPMERKING/>
        <TREFWOORD KODE="K2138" CATEGORIE="K" WAARDE="HALS,F."/>
    </DIA>
                <BOEL ANDERE DIA'S>
</ROOT>


Nu wil ik alle elementen van de dia selecteren op basis van het feit dat trefwoord het attribuut kode heeft met als waarde k2138. Zodoende laat ik dan de hele dia zien, waarbij dit het geval is. Het is namelijk voor een zoekmachine.

Ik kom er helemaal niet meer uit, of het nou expliciet of impliciete xsl is, maakt niet uit, ik was het nu impliciet aan het proberen en kwam uit op:
code:
1
2
3
<xsl:for-each select="PRECEDING::TREFWOORD[@KODE='P103']">
     <xsl:value-of select="."/>
</xsl:for-each>


dit doet het dus ook niet, bedankt alvast voor het meedenken.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Als ik goed begrijp wat je wilt is het nogal simpel:
code:
1
DIA[TREFWOORD/@CODE = 'P103']

  • Shook
  • Registratie: Februari 2001
  • Laatst online: 29-09-2024
Hij werkt niet, ik krijg geen xsl-output. Je schreef code met een c, in mijn xml zit het met een k, maar daar heb ik rekening meegehouden.

Het plaatsen van de rechte haken vind ik wel apart. Ik heb het nog nooit eerder gezien. Hij keurt het daarbij ook niet af. Ik krijg alleen geen data terug.

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

Dan ligt het ergens anders aan, want in een XPath visualiser selecteert hij keurig het goede DIA-element.


code:
1
2
3
<xsl:for-each select="DIA[TREFWOORD/@KODE='K2138']">
     <xsl:value-of select="."/>
</xsl:for-each>

Als je het zo test, klopt het dat het niet gaat werken, DIA heeft geen textnodes.
Beter kan je bijvoorbeeld de KANUM afdrukken om te kijken of het werkt:
code:
1
<xsl:value-of select="KANUM"/>

[ Voor 25% gewijzigd door Rickets op 19-02-2004 11:46 ]

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


  • Shook
  • Registratie: Februari 2001
  • Laatst online: 29-09-2024
Het was uiteindelijk gewoon de juiste parent notatie.

Zoals het er nu instaat doe ik

<xsl:for-each select="//TREFWOORD[@KODE='P103']/../..">
<xsl:value-of select="KLEUR"/>
<xsl:value-of select="OMSC"/>
meerdere waarden e.d.
</xsl:for-each>

Eigenlijk heel basic, maar ik was toch flink de kluts kwijt. Bedankt voor de reacties.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Euhm... ik kan me moeilijk voorstellen dat dat werkt, en heb het dus even getest op je xml document, samen met de expressie die ik eerder geplaatst had. Mijn code werkt gewoon:
code:
1
2
3
4
5
6
7
  <xsl:template match="/ROOT">
    <!-- (je kunt ei'k beter template ipv for-each gebruiken) -->
    <xsl:for-each select="DIA[TREFWOORD/@KODE = 'K2138']">
      kleur: <xsl:value-of select="KLEUR"/>,
      omsc: <xsl:value-of select="OMSC"/>
    </xsl:for-each>
  </xsl:template>
De code die jij geplaatst hebt doet daarentegen erg weinig (je hebt een /.. te veel).

Overigens is mijn expressie vrij standaard. De 'plaatsing van de rechte haken' zou ik dan ook niet apart noemen :)

[ Voor 15% gewijzigd door marcusk op 20-02-2004 17:12 ]

Pagina: 1