Avatar billede graspman Nybegynder
20. august 2008 - 10:04 Der er 17 kommentarer og
1 løsning

Validering af input fra xml ved hælp af "chose "

Hej,

Jeg er ved at lave en signatur fil til Outlook.
Signaturen er baseret på data fra en xml fil.
Afhængigt af hvilken afdeling man kommer fra (xls:chose) skal der skrives forskellige ting i signaturen.
Her er nogle af de data der kommer fra xml'en:

Alias>bla bla</Alias>
  <Address>testvej 4</Address>
  <City>Næstved</City>
  <Company>Afdeling 1</Company>
  <Country />
  <Department>IT</Department>
 
I min kode vil jeg gerne teste på Company og på den måde vælge hvilke ting der skal skrives i brugeren signatur:
Jeg har lave følgende kode, men den tager tilsyneladende kun
<xsl:otherwise> delen.
Det er som om den ikke læser/tester på de 2 første

Det jeg gerne ville er:
Tage indholdet af Department og lave en compare i casen, således at jeg kan styrer hvad der skrives.
Jeg er dog i tvivl om syntaksen samt om det er muligt at lave en
"Company = "afdeling 1" then....

"Company = "afdeling 2" then....



Jeg har lavet følgende kode:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="4.0"/>
    <xsl:param name="CurrentDateTime"/>
    <xsl:template match="/UserData">
    <html>
    <body>

    <p>
    <font size="2" face="Verdana">
    Med venlig hilsen<br/><br/>
    <b>
    <xsl:value-of select="DisplayName"/>
    </b>
    <br/>
    <xsl:value-of select="Title"/>
    <br/>
    <br/> <br/>
   
<xsl:value-of select="Company"/>
          <xsl:choose>
          <xsl:when test=" . = 'afdeling 1' ">
              <img src="http://www.xxx/mail/deflogo-lille.gif"/> <br/>    <br/>
                <font size="1">
                <xsl:value-of select="Company"/> ·
                <xsl:if test="Department !='' "><xsl:value-of select="Department"/> · </xsl:if>
                <xsl:value-of select="Address"/> ·
                <xsl:value-of select="City"/>
                <br/>
                Tlf. <xsl:value-of select="Phone"/> ·
                <xsl:if test="Mobile !='' "> Mobil <xsl:value-of select="Mobile"/> · </xsl:if>
                Fax <xsl:value-of select="Fax"/> ·
                <a href="www.diba.dk</a>" target="_blank">http://www.diba.dk">www.diba.dk</a> <br/> <br/> <br/>            </font>       
          </xsl:when>
 
          <xsl:when test=" . = 'afdeling 2' ">
                <img src="http://www.xxx.dk/mail/xxxlogo-lille.gif"/> <br/>    <br/>       
                                                                <font size="1">
                <xsl:value-of select="Company"/> ·
                <xsl:if test="Department !='' "><xsl:value-of select="Department"/> · </xsl:if>
                <xsl:value-of select="Address"/> ·
                <xsl:value-of select="City"/>
                <br/>
                Tlf. <xsl:value-of select="Phone"/> ·
                <xsl:if test="Mobile !='' "> Mobil <xsl:value-of select="Mobile"/> · </xsl:if>
                Fax <xsl:value-of select="Fax"/> ·
                <a href="www.xxx.dk</a>" target="_blank">http://www.xxx.dk">www.xxx.dk</a> <br/> <br/> <br/>
                </font> <b><font size="2" face="Verdana" color="#807041">reklametekst.....</font></b> <br/>                <font size="1" face="Verdana"></font>
              </xsl:when>
         
          <xsl:otherwise>
              <img src="http://www.xxx.dk/mail/deflogo-lille.gif"/> <br/><br/>                   
                  <font size="1">
                <xsl:value-of select="Company"/> ·
                <xsl:if test="Department !='' "><xsl:value-of select="Department"/> · </xsl:if>
                <xsl:value-of select="Address"/> ·
                <xsl:value-of select="City"/>
                <br/>
                Tlf. <xsl:value-of select="Phone"/> ·
                <xsl:if test="Mobile !='' "> Mobil <xsl:value-of select="Mobile"/> · </xsl:if>
                Fax <xsl:value-of select="Fax"/> ·
                <a href="www.xxx.dk</a>" target="_blank">http://www.xxx.dk">www.xxx.dk</a> <br/> <br/> <br/>
                </font> <b><font size="2" face="Verdana" color="#807041">reklame tekst...</font>
        </xsl:otherwise>           
            </xsl:choose>
 
    </font>               
    </p>
    </body>
    </html>
    </xsl:template>
</xsl:stylesheet>


Koden er forkortet.
Jeg er forholdvis ny til xml så jeg håber der er nogen der vil bruge tid på at hjælpe mig.

På forhånd tak
Avatar billede softspot Forsker
20. august 2008 - 10:15 #1
Jeg kunne forestille mig at du kæmper lidt med "case sensitivity", altså forskellen mellem store og små bogstaver... du kan evt. prøve at lave en translate på den aktuelle node og se om det ændrer noget:

<xsl:when test="translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'afdeling 1'">
Avatar billede graspman Nybegynder
20. august 2008 - 12:01 #2
Hej,
Er der mulighed for at du vil vise mig det i koden?
Jeg er ny til xml så alt hjælp modtages gerne.

På forhånd tak
Avatar billede graspman Nybegynder
20. august 2008 - 12:14 #3
Jeg har nu lagt koden ind, men uden held. Jeg er i tvivl om den validerer på det der er i Company.
Den tager konsekvent kun den del der står i <Otherwise>

<xsl:value-of select="Company"/>
          <xsl:choose>
          <xsl:when test="translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'afdeling 1'">
              <img src="http://www.diba.dk/mail/deflogo-lille.gif"/> <br/>    <br/>
                <font size="1">
                <xsl:value-of select="Company"/> ·
                <xsl:if test="Department !='' "><xsl:value-of select="Department"/> · </xsl:if>
                <xsl:value-of select="Address"/> · hallo
                <xsl:value-of select="City"/>
                <br/>
                Tlf. <xsl:value-of select="Phone"/> ·
                <xsl:if test="Mobile !='' "> Mobil <xsl:value-of select="Mobile"/> · </xsl:if>
                Fax <xsl:value-of select="Fax"/> ·
                <a href="www.xxx.dk</a>" target="_blank">http://www.xxx.dk">www.xxx.dk</a> <br/> <br/> <br/>
Avatar billede graspman Nybegynder
20. august 2008 - 12:16 #4
Burde der ikke være noget i retningen af 
<xsl:when test= <xsl:value-of select="Company"/> "translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'afdeling 1'">
Avatar billede softspot Forsker
20. august 2008 - 12:34 #5
Nej til det sidste :-)

Du skal muligvis benytte funktionen text() til at hente indholdet af den Company-node du er igang med at undersøge. Du skal altså udskifte denne linie:

  <xsl:when test=" . = 'afdeling 1' ">

med denne linie:

  <xsl:when test="translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'afdeling 1'">
Avatar billede graspman Nybegynder
20. august 2008 - 13:45 #6
Hmmm.. Har nu også forsøgt det - men uden held.
Kan jeg prøve at sende dig hele koden?
Avatar billede softspot Forsker
20. august 2008 - 15:11 #7
Du må hellere lægge lidt mere af XML-strukturen, så det er til at se hvilken datastruktur du prøver at kaste rundt med... det behøver ikke være hele XML'en i sin fulde længde, men det ville være fint, hvis det i det mindste var illustreret hvilken struktur der var tale om.
Avatar billede softspot Forsker
20. august 2008 - 15:14 #8
Dog ville det også være godt at se alt hvad der ligger mellem

<xsl:template match="/UserData">

  <!-- ...ALTSÅ VIS ALT HERINDE... -->

</xsl:template>
Avatar billede graspman Nybegynder
20. august 2008 - 16:26 #9
Templaten:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="4.0"/>
    <xsl:param name="CurrentDateTime"/>
    <xsl:template match="/UserData">
    <html>
    <body>

    <p>
    <font size="2" face="Verdana">
    Med venlig hilsen<br/><br/>
    <b>
    <xsl:value-of select="DisplayName"/>
    </b>
    <br/>
    <xsl:value-of select="Title"/>
    <br/>
    <br/> <br/>
   
<xsl:value-of select="Company"/>
          <xsl:choose>
          <xsl:when test="translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'DiBa Bank'">
              <img src="http://www.diba.dk/mail/deflogo-lille.gif"/> <br/>    <br/>
                <font size="1">
                <xsl:value-of select="Company"/> ·
                <xsl:if test="Department !='' "><xsl:value-of select="Department"/> · </xsl:if>
                <xsl:value-of select="Address"/> ·
                <xsl:value-of select="City"/>
                <br/>
                Tlf. <xsl:value-of select="Phone"/> ·
                <xsl:if test="Mobile !='' "> Mobil <xsl:value-of select="Mobile"/> · </xsl:if>
                Fax <xsl:value-of select="Fax"/> ·
                <a href="www.diba.dk</a>" target="_blank">http://www.diba.dk">www.diba.dk</a> <br/> <br/> <br/>            </font>       
          </xsl:when>
 
          <xsl:when test="translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'DiBa Billån'">
                <img src="http://www.diba.dk/mail/dibalogo-lille.gif"/> <br/>    <br/>       
                                                                <font size="1">
                <xsl:value-of select="Company"/> ·
                <xsl:if test="Department !='' "><xsl:value-of select="Department"/> · </xsl:if>
                <xsl:value-of select="Address"/> ·
                <xsl:value-of select="City"/>
                <br/>
                Tlf. <xsl:value-of select="Phone"/> ·
                <xsl:if test="Mobile !='' "> Mobil <xsl:value-of select="Mobile"/> · </xsl:if>
                Fax <xsl:value-of select="Fax"/> ·
                <a href="www.diba.dk</a>" target="_blank">http://www.diba.dk">www.diba.dk</a> <br/> <br/> <br/>
                </font> <b><font size="2" face="Verdana" color="#807041">Gratis MasterCard med forsikringer</font></b> <br/>                <font size="1" face="Verdana">Bliv <a href="http://www.diba.dk/Privat/?id=837" target=" _blank">DiBa Plus kunde </a>
                i DiBa Bank og få et gratis MasterCard Guld  med rejseforsikringer inkluderet.</font>
              </xsl:when>
         
          <xsl:otherwise>
              <img src="http://www.diba.dk/mail/dibalogo-lille.gif"/> <br/><br/>                   
                  <font size="1">
                <xsl:value-of select="Company"/> ·
                <xsl:if test="Department !='' "><xsl:value-of select="Department"/> · </xsl:if>
                <xsl:value-of select="Address"/> ·
                <xsl:value-of select="City"/>
                <br/>
                Tlf. <xsl:value-of select="Phone"/> ·
                <xsl:if test="Mobile !='' "> Mobil <xsl:value-of select="Mobile"/> · </xsl:if>
                Fax <xsl:value-of select="Fax"/> ·
                <a href="www.diba.dk</a>" target="_blank">http://www.diba.dk">www.diba.dk</a> <br/> <br/> <br/>
                </font> <b><font size="2" face="Verdana" color="#807041">Gratis MasterCard med forsikringer</font></b> <br/>                <font size="1" face="Verdana">Bliv <a href="http://www.diba.dk/Privat/?id=837" target=" _blank">DiBa Plus kunde</a>
                    i DiBa Bank og få et gratis MasterCard Guld  med rejseforsikringer inkluderet.</font>
        </xsl:otherwise>           
            </xsl:choose>

   
   

   
   
    </font>               
    </p>
    </body>
    </html>
    </xsl:template>
</xsl:stylesheet>
Avatar billede graspman Nybegynder
20. august 2008 - 16:32 #10
<?xml version="1.0" encoding="utf-16" ?>
- <UserData>
    <Address>Axeltorv 4</Address>
  <City>4700 Næstved</City>
  <Company>DiBa Bank</Company>
  <Country />
  <Department>IT</Department>
  <Office>6060-58</Office>
  <DisplayName>Gordon</DisplayName>
  <Email>minmail@mail.dk</Email>
  <Fax>5575 4501</Fax>
  <FirstName>sussie</FirstName>
  <Initials />
  <LastName>gladpige</LastName>
  <Mobile />
  <Phone>xxxx xxxx</Phone>
  <PhoneHome />
  <State />
  <Title>IT-konsulent</Title>
  <Zip />
  <Pager />
  <Notes />
    </UserData>
Avatar billede softspot Forsker
20. august 2008 - 16:58 #11
OK, det første du lige skal have på plads er store kontra små bogstaver. Den translate jeg foreslog gør det, at den "oversætter" alle store bogstaver til små bogstaver, så derfor skal dine konstante tekster være med småt. Det vil sige:

    <xsl:when test="translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'DiBa Bank'">

skal i stedet se således ud:

    <xsl:when test="translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'diba bank'">

Prøv lige det i første omgang, så må vi tage den derfra...
Avatar billede graspman Nybegynder
21. august 2008 - 13:21 #12
Hejsa,
Så har jeg forsøgt med

        <xsl:when test="translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'diba bank'">

men uden held...
Nogen forslag?
Avatar billede softspot Forsker
21. august 2008 - 14:23 #13
Fordømt! Det er nok fordi Company IKKE er kontekst-node. Prøv lige denne version i stedet:

        <xsl:when test="translate(Company,'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'diba bank'">

eller måske endda denne også fungerer:

        <xsl:when test="Company = 'DiBa Bank'">
Avatar billede graspman Nybegynder
21. august 2008 - 14:30 #14
Jeg fik det løst selv:     
  <xsl:when test="translate(Company[text()],'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ','abcdefghijklmnopqrstuvwxyzæøå') = 'diba bankk'">

Men tak for hjælpen.

Gider du ikke smide et svar - så er der point til dig :)
Avatar billede softspot Forsker
21. august 2008 - 14:35 #15
Fungerede en af de sidste versioner ikke (det ville være lidt lettere at overskue koden, hvis der var lidt mindre af den :-))?

Velbekomme :)
Avatar billede softspot Forsker
21. august 2008 - 16:43 #16
Tak for point :)
Avatar billede graspman Nybegynder
22. august 2008 - 13:59 #17
Nej, desværre ...
Avatar billede softspot Forsker
22. august 2008 - 14:18 #18
hm... ok, men godt du så selv kunne finde en metode der fungerede. :-)

Tak for point :)
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