Avatar billede jokkejensen Novice
18. januar 2007 - 19:49 Der er 36 kommentarer og
1 løsning

xsl:if sætning - se om der findes indhold i node

Hej..

Sidder og forsøger at få banket noget synkron cms sammen, og har ikke arbejdet med xlst før, så spørgsmålet er nok lettere end forventet.

Jeg har :

http://henton.webdanmark.com/forside?xml=1

Der er i cell med id=7 et /ContentArea/ som endten har noder eller ej.

Jeg vil gerne smide en css klasse på mit Content div alt efter om der findes nogle elementer i /ContentArea/ på nogen sider er noden :

<Cell Document="true" Functions="true" SimpleContent="true" ModuleElements="true" Id="7" Placement="5" TemplateContentOnly="false">
  <Title>Right content</Title>
  <ContentArea />
</Cell>

og som linket højere oppe er <ContentArea> fyldt med en masse child's <Document> eksistere eksempelvis altid hvis der er noget.

problem stillingen er at jeg vil lave mit #Content div bredere hvis der ikke er noget i "RightContent".

    <xsl:attribute-set name="ContentAttrbutes">
            <xsl:attribute name="class"><xsl:if test="/Page/Layout/Row/Cell[@Id='7']/ContentArea">big</xsl:if></xsl:attribute>
        </xsl:attribute-set>

Her returnere den altid true. Forståeligt nok idet noden <ContentArea> altid eksisterer. Men burde jeg ikke kunne sige:

    <xsl:attribute-set name="ContentAttrbutes">
            <xsl:attribute name="class"><xsl:if test="/Page/Layout/Row/Cell[@Id='7']/ContentArea/Document">big</xsl:if></xsl:attribute>
        </xsl:attribute-set>

Og så vil stylen kun blive tilføjet hvis <Document> noden eksisterer i <ContentArea>.

Har jeg ikke forklaret mig tilstrækkeligt, siger I bare til.

Håber på lidt hjælp !

/JJ
Avatar billede kalp Novice
18. januar 2007 - 20:09 #1
øser lige ud af min viden;) - som er lille på området her..

men jeg tror godt jeg kender svaret, men skal bare lige være med på det du vil..
det lyder som om du du kan bygge videre på din if.. altså din xpath expression skal bare lige tjekke om den er tom eller ej..

/Page/Layout/Row/Cell[@Id='7']/ContentArea/Document[. != '']
Avatar billede kalp Novice
18. januar 2007 - 20:10 #2
vil give true ved dem som ikke er tomme.. og denne giver true ved de tomme..
/Page/Layout/Row/Cell[@Id='7']/ContentArea/Document[. = '']
Avatar billede kalp Novice
18. januar 2007 - 20:20 #3
vil gerne hjælpe, men du må sige til hvis jeg har misforstået dig.. om ikke andet er der denne konstruktion..

<xsl:choose>
  <xsl:when test="/Page/Layout/Row/Cell[@Id='7']/ContentArea/Document[. != '']">
    din style 1 her ???
  </xsl:when>
  <xsl:otherwise>
    din style 2 her ???
  </xsl:otherwise>
</xsl:choose>
Avatar billede jokkejensen Novice
18. januar 2007 - 20:24 #4
Samme problem..

Se her..

http://henton.webdanmark.com/forside?xml=1 <-- udskriver xml
http://henton.webdanmark.com/forside <-- selve siden

http://henton.webdanmark.com/moduler?xml=1 <-- udskriver xml
http://henton.webdanmark.com/moduler <-- selve siden

På forsiden har jeg nogle elementer i højre side, der for er det noget i <ContentArea>. På modul siden har ikke noget i højre side og der er <ContentArea> tom. (i <Cell id="7"> )

Jeg har forsøgt med begge dine, og de giver inden forskel, de er validerer begge "false", altså der kommer ingen "class="big" på mit <div id="Content">
Avatar billede jokkejensen Novice
18. januar 2007 - 20:25 #5
jeg var lige ved at sluge min McD menu, så svarede ikke lige...
Avatar billede jokkejensen Novice
18. januar 2007 - 20:27 #6
xsl:choose returnere altid "otherwise" for begge.
Avatar billede kalp Novice
18. januar 2007 - 20:28 #7
det er fair nok.. det skal jo ned;O)

men det eneste du egentlig vil er at tjekke dine Noder "Document" om de indeholder noget.. hvis de gør skal der anvendes style 1 og ellers style 2 ?

og Document er en node og ikke en attribut ikke?
jeg har ikke mit Xml Notepad ved hånden.. gudeværktøj til overblik over xml:)
Avatar billede jokkejensen Novice
18. januar 2007 - 20:36 #8
brug IE og søg på ---> id="7" <-- i begge ovenstående xml filer - så kan du se den node jeg taler om..

Document er en node, med en masse childs - Den eksistere kun hvis der er noget i højre spalte og det er det jeg gerne vil validere på.
Avatar billede kalp Novice
18. januar 2007 - 20:44 #9
jeg kan ike finde det Document node.. medmindre du taler om det som er INDE i ContentArea ?

for hvis det er der inde så ser det jo ud til årsagen er at de xml dokument ikke er valid
Avatar billede kalp Novice
18. januar 2007 - 20:47 #10
ahh vent.. okay det ser sådan der ud efter du har smidt dit din xlst kode ind eller?

jeg kunne nemlig heller ikke finde det i det originale, men okay hvis det er derfor så kan jeg godt forstå det, men du må gerne lige svare på det alligevel så jeg er sikker
Avatar billede jokkejensen Novice
18. januar 2007 - 20:47 #11
xml documentet er valid, du skal bare fjerne whitespace omkring <xml> deklerationen i toppen, som IE laver....

Ja Document er child til ContentArea, og derfor vil jeg validere om det eksisterer eller ej, eksisterer det - ja så er der noget i RightContent, eksistere Document ikke som et child til ContentArea så er der ikke noget indhold i højre side ? - taler vi totalt forbi hinadnen ?
Avatar billede kalp Novice
18. januar 2007 - 20:49 #12
jeg tror jeg kan se problemet.. i min kode før tjekker jeg på "InnerText" i Document.. men der er ingen så vidt jeg kan se andet en andre nodes. vi bliver nød til at tjekke på en af dens attributter!
er denne okay?
ElementId

så f.eks

<xsl:choose>
  <xsl:when test="/Page/Layout/Row/Cell[@Id='7']/ContentArea/Document[@ElementId != '']">
    din style 1 her ???
  </xsl:when>
  <xsl:otherwise>
    din style 2 her ???
  </xsl:otherwise>
</xsl:choose>
Avatar billede jokkejensen Novice
18. januar 2007 - 20:49 #13
forstil dig jeg vil se forskel på disse 2..

hvordan ville du løse:

<Cell Document="true" Functions="true" SimpleContent="true" ModuleElements="true" Id="7" Placement="5" TemplateContentOnly="false">
  <Title>Right content</Title>
  <ContentArea />
</Cell>


<Cell Document="true" Functions="true" SimpleContent="true" ModuleElements="true" Id="7" Placement="5" TemplateContentOnly="false">
  <Title>Right content</Title>
  <ContentArea><node ogEnAttibut="etellerandet"></node></ContentArea>
</Cell>

/JJ
Avatar billede kalp Novice
18. januar 2007 - 20:55 #14
forresten så kan du være mere sikker på at du har fat i den rigtige node sådan her

<xsl:when test="//Cell[@Id='7']/ContentArea/Document[@ElementId != '']">

for det kan sgu godt være det er alt det du skrev før det som ikke fandt den rigtige sti til noden..
Avatar billede jokkejensen Novice
18. januar 2007 - 21:03 #15
Grr stadig samme problem.

Jeg forsøgte igen bare med : //Cell[@Id='7']/ContentArea

Den fanges af begge..

Men så snart jeg bruger :  //Cell[@Id='7']/ContentArea/Document kommer den på ingen af dem...

det er fandme da underligt.... sidder lige og roder med xmlSpy, og er ved at smide de 2 xml sider ind i, men syntes ikke rigtigt jeg kan få hul :(
Avatar billede kalp Novice
18. januar 2007 - 21:18 #16
ja det er ret mystisk når den godt kan finde frem til det..
altså hertil
//Cell[@Id='7']/ContentArea

for det andet burde jo også være reelt nok, men jeg har mulighed for at teste det i morgen da jeg har et xpath validator på arbejdet så kan jeg se om den virker eller ej
Avatar billede jokkejensen Novice
18. januar 2007 - 21:33 #17
fedt hvis du gider kigge på, vi har godt nok reception i morgen, så kan godt være jeg først melder tilbage noget senere eller først mandag.
Avatar billede Slettet bruger
18. januar 2007 - 21:44 #18
Forskellen på de to er at ContentArea "har en Document child-node", hvilket man bruger klammerne til:

Match ContentArea der har et Document element indeni:

  /Page/Layout/Row/Cell[@Id='7']/ContentArea[Document]


Match en tom ContentArea:

  /Page/Layout/Row/Cell[@Id='7']/ContentArea[not(*)]

/CS
Avatar billede jokkejensen Novice
18. januar 2007 - 22:09 #19
/Page/Layout/Row/Cell[@Id='7']/ContentArea[not(*)] <-- rammer begge

/Page/Layout/Row/Cell[@Id='7']/ContentArea[Document] <-- rammer ingen..

Jeg må sku gøre noget helt galt..

inde i en template med match : match="Page"

Har jeg følgende : <div id="Content" xsl:use-attribute-sets="ContentAttributes">   

og uden for template har jeg :
        <xsl:attribute-set name="ContentAttributes">
            <xsl:attribute name="class">
                <xsl:if test="/Page/Layout/Row/Cell[@Id='7']/ContentArea[not(*)]">big</xsl:if>
            </xsl:attribute>
        </xsl:attribute-set>


Jeg fatter hat... :(

/JJ
Avatar billede kalp Novice
18. januar 2007 - 22:11 #20
jeg vil mene at hvis de eksempler greystate kom med skal virke så skal der . foran

  /Page/Layout/Row/Cell[@Id='7']/ContentArea[.Document]

jeg er ikke helt sikker på den anden kan bruges i denne sammenhæng.. men  tjek igen om den er tom ved at skrive

  /Page/Layout/Row/Cell[@Id='7']/ContentArea[.Document != '']
Avatar billede jokkejensen Novice
18. januar 2007 - 22:13 #21
du kan da ikke sige .Document ? . er vel self ?
Avatar billede kalp Novice
18. januar 2007 - 22:15 #22
skulle gerne være self ja.. self for ContentArea for det er den som har Noden
Avatar billede jokkejensen Novice
18. januar 2007 - 22:26 #23
gutter..

tjek lige siden...

http://henton.webdanmark.com/forside

Jeg har udskrevet :


<div id="Content" xsl:use-attribute-sets="ContentAttributes">   
<xsl:copy-of select="/Page/Layout/Row/Cell[@Id='7']/ContentArea"></xsl:copy-of>

det udskriver... med højre indhold :

<ContentArea>&lt;form method="post" name="form200024_10"&gt;&lt;input type="hidden" name="formid" value="200024_10" /&gt;&lt;div class="Login RightBox"&gt;&lt;img alt="" src="/frontend/graphics/backgrounds/RightBox_corner.gif" class="corner" /&gt;&lt;div class="outer"&gt;&lt;div class="inner"&gt;&lt;a name="1033_77"&gt;&lt;!-- --&gt;&lt;/a&gt;&lt;h1&gt;Log ind&lt;/h1&gt;&lt;p&gt;&lt;od /&gt;&lt;od /&gt;Du kan logge ind her&lt;/p&gt;&lt;div class="labelPart"&gt;&lt;label for="SingleLineWithLabel_32"&gt;Brugernavn:&lt;/label&gt;&lt;/div&gt;&lt;div class="inputPart"&gt;&lt;input type="text" name="SingleLineWithLabel_32" id="SingleLineWithLabel_32" value="" size="30" maxlength="100" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="clear"&gt;&lt;!-- --&gt;&lt;/div&gt;&lt;div class="labelPart"&gt;&lt;label for="PasswordWithLabel_33"&gt;Kodeord:&lt;/label&gt;&lt;/div&gt;&lt;div class="inputPart"&gt;&lt;input type="password" name="PasswordWithLabel_33" id="PasswordWithLabel_33" value="" size="30" maxlength="100" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="clear"&gt;&lt;!-- --&gt;&lt;/div&gt;&lt;input type="submit" name="Log ind" value="Log ind" class="viaButton" /&gt;&lt;br /&gt;&lt;div class="clear"&gt;&lt;!-- --&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/form&gt;&lt;a name="1022_41"&gt;&lt;!-- --&gt;&lt;/a&gt;&lt;div class="RightBox InfoBox"&gt;&lt;img alt="" src="/frontend/graphics/backgrounds/RightBox_corner.gif" class="corner" /&gt;&lt;div class="outer"&gt;&lt;div class="inner"&gt;&lt;h1 class="gray"&gt;Hvorfor HENTON Back Office?&lt;/h1&gt;&lt;div class="Box"&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Uvildig rådgivning?&lt;br /&gt;&lt;/strong&gt;Lorem ipsum dolor sit amet.?&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Høj sikkerhed?&lt;br /&gt;&lt;/strong&gt;In scelerisque mattis est.?&lt;/li&gt;&lt;li&gt;&lt;strong&gt;100% diskretion?&lt;/strong&gt;&lt;br /&gt;Consectetuer adipiscing elit.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="via37.html"&gt;Ls mere om HENTON back office&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</ContentArea>


Det burde sku da være hele lortet... med <document> ?
Avatar billede jokkejensen Novice
18. januar 2007 - 22:26 #24
så det er vel [text()] jeg er ude efter eller ?
Avatar billede kalp Novice
18. januar 2007 - 22:40 #25
jeg tester mine forslag i morgen på min workstation, men om ikke andet så har jeg stadig ikke valid XML selv.. selv om jeg fjerner white space øverst.. eller det gør jeg ikke for der er intet når jeg gemmer det på min pc:)

så "teknisk" set har jeg ikke set dokumentet som det rigtigt bør være
Avatar billede kalp Novice
19. januar 2007 - 13:32 #26
jokkejensen >> Nu har jeg åbnet den for at teste, men xml'en er altså stadig ikke valid hos mig.. altså den brokker sig ikke over noget min validator, men problemet er at alle noder i <ContentArea> bliver læst som text og ikke noder!!

Det er altså den eneste forklaring jeg har.

med mindre det virker hos dig?? i min validator er det data i Contentare og ikke noder..
Avatar billede kalp Novice
19. januar 2007 - 13:35 #27
du kan måske selv se hvorfor, men bla. kunne det se ud til at dette ikke skal være der
No snippet for template with id: 5, type: Logon

det kommer lige før Document noden.. og vel at resten læses som tekst og ikke noder.
Avatar billede kalp Novice
19. januar 2007 - 13:38 #28
hent det værktøj jeg bruge..
http://www.microsoft.com/downloads/details.aspx?FamilyID=72D6AA49-787D-4118-BA5F-4F30FE913628&displaylang=en

installer og åben så din xml fil.. så kan du se det hele i træstruktur:)
og så kan du se hvad jeg mener.. det er 100000 gange mere overskueligt at arbejde med XML sådan:)
Avatar billede jokkejensen Novice
22. januar 2007 - 11:57 #29
JEg bruger noget der hedder xmlSpy og det er ret fint til mit behov, kan også åbne det i træstruktur. og genrere xpath for mig..

Men lige den her fatter jeg ikke..

mht til : No snippet for template with id: 5, type: Logon; er det kun på mit xml layout den fremkommer. Endten er den "lukket" <ContentArea /> eller også er der et eller andet indhold i den.

(Jeg har tilføjet en logon til xml layoutet. så nu skriver den det ikke over længere.
Avatar billede kalp Novice
22. januar 2007 - 12:01 #30
som jeg siger så er det det et valid xml dokument...
men den læser ikke indholdet i lige præcis id 7's contentarea som nodes men som data.. tekst altså..

og så vil det ikke virker..
hvis det bliver læst som nodes så virker det..

det er op til dig selv om du til tage med ord for det elle ej;)
Avatar billede jokkejensen Novice
22. januar 2007 - 13:32 #31
Hey..

Synkron er bygget på en måde.. så den præsentere noget xml ... det xml kan jeg så formatere med xslt..

Jeg har "selv" lavet så jeg kan udskrive ren xml, ved at matche / i en række templates og udskrive med <xsl:copy-of> du skal derfor ikke tage dig af formateringen i xml=1 layoutet - det er en jeg selv står for, og den kan derfor være noget buggy - XML arket jeg arbejeder med er valid, og du kan selv lave..

Altså er xml=1 versionen også bare en kopi af xml'et der bliver udskrevet, noget jeg kan arbejde videre på.. Tag dig derfor ikke af den forkerte formatering og whitespace fejl i toppen.

Mvh
Avatar billede jokkejensen Novice
22. januar 2007 - 13:36 #32
jeg har altså 2 layouts.. et der bare udskriver "fejlfyldt xml" som jeg selv lige retter til gyldig... og et xhtml/markup layout..

Jeg skifter mellem de 2 med ?xml=1

ok ?

/JJ
Avatar billede kalp Novice
22. januar 2007 - 13:50 #33
hvis det ser sådan her ud hos dig også
http://kalp.dk/hmm.jpg

så kan jeg godt forstå hvorfor det ikke virker og så kan jeg ikke rigtig hjælpe med problemet for det er xml'en der skal laves om.

hvis det ikke ser sådan ud hos dig... så ved jeg ikke hvorfor det ikke åbner korrekt hos mig for jeg har fjernet white spaces som du siger.
ellers må du ligge en original xml op til downloade hvor ie ikke har rørt ved den.
Avatar billede jokkejensen Novice
23. januar 2007 - 14:11 #34
ejhhhhhhhhhhhh der kommer et korrekt xml dokument fra synkron løsningen...

Det udskriver jeg så bare som xml med xslt.. ala Match="/" <copy-of select="node()">, men jeg har lavet en fejl, så den escaper tegnene... det rigtige xml dokument er korrekt - men mit output af det fejler.. Ved ikke hvordan jeg ellers kan forklare.

men det er også lige godt, smid et svar som tak for din tid :)

/JJ
Avatar billede kalp Novice
23. januar 2007 - 14:16 #35
ja men jeg forstod ikke rigtig hvad der skete der:S
Jeg forstår bare at det dokument jeg kunne hente ikke kunne bruges til de forslag jeg kom med fordi elementerne under ContentArea blev læst forkert - som mit screendump viser

Hvis jeg ikke har løst noget problem eller peget dig i den rigtige retning så skal jeg ikke have point for min tid...

men der kom da mange indlæg i denne tråde må jeg indrømme he he
Avatar billede jokkejensen Novice
23. januar 2007 - 14:53 #36
jo jeg vil gerne smide de points, du gjorde et forsøg..

/(JJ
Avatar billede kalp Novice
23. januar 2007 - 15:02 #37
*** en forvirret kalp ***

*** uden at have forstået det helt ***

*** så håber jeg du fik noget ud af mit input herinde ***


he he;)
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