Avatar billede phonbox Nybegynder
17. februar 2011 - 14:02 Der er 6 kommentarer

XLS/XPATH problem

problem med xslt/xpath
Hejsa har et mindre problem med xpath/xslt (version 1).

<sektion value="hovedsektion">
    <overskrift value="Lene"/>
    <element value=""/>
    <element value=""/>
    <element value=""/>
    <overskrift value="Gitte"/>
    <element value="a"/>
    <element value="b"/>
    <element value="c"/>
    <element value="d"/>
</sektion>

Ovenstående er et lille del af et xml dokument der skal transformeres til andet xml format. xslt reglen der skal implementeres kan defineres som følgende
1. hvis overskrift elementet har en @value != '' og alle efterfølgende søskende elementer af typen element frem til næste overskrift element har en value != '' skal overskrift udskrives.
Dvs. i ovenstående eksempel skal overskrift elementet med attributten value="Lene" ikke udskrives da alle elementer frem til næste overskrift element ikke indeholder en værdi. Jeg har brug for en regel der kan håndtere denne situation.
Havde oprindeligt en regel som nedenstående. Men denne kan ikke anvendes til ovenstående situation. Jeg kan som udgangspunkt ikke vide hvor mange elementer xml dokumentet indeholder !

<xsl:template match="overskrift">
<xsl:if test="@value!='' and following-sibling::element/@value != ''">
      Gør et eller andet

</xsl:template>
Avatar billede tjens Nybegynder
17. februar 2011 - 22:15 #1
Har du ikke mulighed for at kræve, at der kommer relevante </overskrift> slut-tags i den XML?

Uden dem, er det mere en sekventiel tekstfil, end en XML fil, efter mine begreber.
Avatar billede arne_v Ekspert
18. februar 2011 - 02:27 #2
<element value="x"/>

er da well formed XML.
Avatar billede tjens Nybegynder
18. februar 2011 - 07:37 #3
Det jeg mener er, at XML strukturen ikke beskriver datastrukturen, når <element> ikke er childnodes under <overskrift>

Og det er kun derfor, at phonbox har fået problemer, og har oprettet spørgsmålet.

Så hvis man kan rette "fejlen", i det program der danner XML-filen, kan man spare unødig kompleksitet i den aktuelle funktion.
Avatar billede phonbox Nybegynder
18. februar 2011 - 14:02 #4
det er helt korrekt at formatet bør ændres. Desværre kan jeg ikke ændre i dette. Det vil få ja....uoverskuelige konsekvenser. Jeg er nødt til at løse det på en anden måde. Takker for jeres kommentarer
Avatar billede tjens Nybegynder
19. februar 2011 - 21:33 #5
Jeg har fået sat noget XSLT sammen som løser opgaven:

Demo: http://tjens.dk/eksperten/931889/

Men da jeg efter lang tids søgning og tutorials, fandt funktioner som jeg ikke tidligere har brugt, kan jeg ikke selv bedømme om det er en fornuftig og korrekt metode.

Så kommentarer og rettelser er velkomne.
Avatar billede jokkejensen Novice
04. marts 2011 - 02:21 #6
Det bør udføres med en key, og generate-id.. Her tænker jeg performance mæssigt. ovenstående virker jo fint.

Her er et lignede eksempel:
http://stackoverflow.com/questions/2161766/xpath-select-all-following-siblings-until-another-sibling

du skal dog rette det til name() != 'overskrift', frem for et "ikke tomt @id"

vh
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