14. august 2005 - 23:58
Der er
22 kommentarer og 1 løsning
loop i loop
Jeg har denne XML: <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="cinemazone_katalog2.xsl"?> <A> <B> <C>1</c> <D>2</d> <E><f><g>11</g><h>11a</h><i>11b</i></f> <f><g>22</g><h>22a</h><i>22b</i></f></E> </B> </A> Jeg vil gerne have resultat i semikolon separeret fil: 1;2;11;11a;11b 1;2;22;22a;22b I XML'en kan der være fra nul til mange af <f></f> i <E></E> Jeg har forsøgt mig med flere varianter af for-each i XSL, uden held. Er der nogen der har et bud på en XSL, der opfylder kravet?
Annonceindlæg fra Computerworld it-jobbank
15. august 2005 - 07:53
#1
Har du mulighed for at lave XML-strukturen om? Som XML er tænkt er der ikke nogen indlysende sammenhæng mellem din C-tag og 1. child-node i din E-tag, og heller ikke mellem D-taggen og den 2. child-node; Det kunne lige så godt tænkes at de var totalt uafhængige og blot stod i samme rækkefølge. Mulighederne er mange, men et alternativ til: <B> <C>1</c> <D>2</d> <E> <f> <g>11</g> <h>11a</h> <i>11b</i> </f> <f> <g>22</g> <h>22a</h> <i>22b</i> </f> </E> </B> - kunne jo være: <B> <C attributNavn="1"> <f> <g>11</g> <h>11a</h> <i>11b</i> </f> </c> <D attributNavn="2"> <f> <g>22</g> <h>22a</h> <i>22b</i> </f> </d> </B> Husk på at XML mere er tænkt til at blive læst og fortolket af programmer end af menneskeøjne. I det givne tilfælde er det problematisk at loope over child-nodsene i B-noden idet disse skal behandles forskelligt.
15. august 2005 - 11:37
#2
Jeg vil kunne ændre XML'en. Informationern i <f> skal jo knyttes op på både <C> og <D> så resultatet bliver 1;2;11;11a;11b 1;2;22;22a;22b Kan du hjælpe med et bud på XSL'en til dit forslag så?
15. august 2005 - 12:40
#3
Ja, det skulle nok kunne lade sig gøre. Desværre bare ikke lige nu, idet jeg skal ud af døren. :^| Jeg kigger på det i morgen, hvis der da ellers ikke er nogen andre som har løst den i mellemtiden. :^)
15. august 2005 - 16:26
#4
Hej nielle, Jeg kan alligevel ikke få rettet XML'en. Kan du se, om der overhovedet er en løsning alligevel. Jeg skal bruge data i en database. Evt. kan man lave udtræk til flere tabeller. Én tabel med <C> og <g> (hoveID med subID, så at sige) En anden tabel med <g>, <h> og <i> (indhold for <f>) En tredje tabel med <C> og <D>. Så vil der være en relation mellem tabellerne. Hvad siger du?
15. august 2005 - 21:01
#5
Hvormange C og D-noder kan der være? Jeg vil umiddelbart mene at du skal ud i noget rekursion (en meget nyttig teknik i XSL i øvrigt :)). Jeg skal bare lige have lidt mere info om reglerne for dit XML.
15. august 2005 - 23:44
#6
Der er en del C og D-noder. Du får her den fulde version ;-) <?xml version="1.0" encoding="ISO-8859-1"?> <films> <film> <id>1111</id> <title>Surviving Christmas</title> <synopsis><![CDATA[Drew Latham, har ikke nogen familie, så i de ensomme juledage, overtaler en stakkels uvidende familie til at forestille HANS familie. Det skulle de aldrig have gjort]]></synopsis> <directors> <person> <personid>12</personid> <name>Mike Mitchell</name> <role></role> </person> </directors> <scriptwriters> <person> <personid>24</personid> <name>Deborah Kaplan</name> <role></role> </person> <person> <personid>25</personid> <name>Harry Elfont</name> <role></role> </person> </scriptwriters> <actors> <person> <personid>13</personid> <name>Ben Affleck</name> <role>Drew Latham</role> </person> <person> <personid>46</personid> <name>Christina Applegate</name> <role>Alicia Valco</role> </person> <person> <personid>56</personid> <name>James Gandolfini</name> <role>Tom Valco</role> </person> </actors> <producers> <person> <personid>1451</personid> <name>Betty Thomas</name> <role></role> </person> <person> <personid>1452</personid> <name>Jenno Topping</name> <role></role> </person> </producers> <photographers> <person> <personid>21</personid> <name>Peter Lyons Collister</name> <role></role> </person> <person> <personid>66</personid> <name>Tom Priestley Jr</name> <role></role> </person> </photographers> <cutters> <person> <personid>55</personid> <name>Craig McKay</name> <role></role> </person> </cutters> <composers> <person> <personid>7</personid> <name>Randy Edelman</name> <role></role> </person> </composers> <genre>Komedie</genre> <originaltitle>Surviving Christmas</originaltitle> <productionyear>2004</productionyear> <cinemadate>2004-12-10</cinemadate> <image1>billede4556.jpg</image1> </film> </films>
16. august 2005 - 00:08
#7
og et konkret eksempel på hvordan du vil have data ud pga. de data du har vist til sidst kunne være...? 1111;Surviving Christmas;12;Mike Mitchell; 1111;Surviving Christmas;24;Deborah Kaplan; 1111;Surviving Christmas;25;Harry Elfont; 1111;Surviving Christmas;13;Ben Affleck;Drew Latham osv... eller hvad?
16. august 2005 - 09:02
#8
Prøv med dette her.
<?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" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="films/film"/>
</xsl:template>
<xsl:template match="film">
<xsl:apply-templates select="//person">
<xsl:with-param name="id" select="id"/>
<xsl:with-param name="title" select="title"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="person">
<xsl:param name="id"/>
<xsl:param name="title"/>
<xsl:value-of select="$id"/>;<xsl:value-of select="$title"/>;<xsl:value-of select="personid"/>;<xsl:value-of select="name"/>;<xsl:value-of select="role"/><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
16. august 2005 - 09:34
#9
softspot: Du har ret. 1111;Surviving Christmas;12;Mike Mitchell; 1111;Surviving Christmas;24;Deborah Kaplan; 1111;Surviving Christmas;25;Harry Elfont; 1111;Surviving Christmas;13;Ben Affleck;Drew Latham atoft: Jeg har prøvet. Det ser fornuftigt ud. Dog kommer det i én lang streng. Hvordan laves linieskift ved hvert <id> så resultatet fremstår som under min kommentar til softspot?
16. august 2005 - 10:08
#10
Det er <xsl:text> elementer som skal lave linieskiftet derfor er det vigtigt at du har </xsl:text> på en ny linie.
16. august 2005 - 10:09
#11
altså <xsl:value-of select="$id"/>;<xsl:value-of select="$title"/>;<xsl:value-of select="personid"/>;<xsl:value-of select="name"/>;<xsl:value-of select="role"/><xsl:text> <xsl:text>
16. august 2005 - 11:41
#12
Ok, jeg er med på linieskift. Men jeg har brug for at kunne skelne pr. film og pr. funktion (f.eks. <actors> eller <producers>). Her nyt XML eksempel med 2 <film>: <?xml version="1.0" encoding="ISO-8859-1"?> <films> <film> <id>1111</id> <title>Surviving Christmas</title> <synopsis><![CDATA[Drew Latham, har ikke nogen familie, så i de ensomme juledage, overtaler en stakkels uvidende familie til at forestille HANS familie. Det skulle de aldrig have gjort]]></synopsis> <directors> <person> <personid>12</personid> <name>Mike Mitchell</name> <role></role> </person> </directors> <actors> <person> <personid>13</personid> <name>Ben Affleck</name> <role>Drew Latham</role> </person> <person> <personid>46</personid> <name>Christina Applegate</name> <role>Alicia Valco</role> </person> <person> <personid>56</personid> <name>James Gandolfini</name> <role>Tom Valco</role> </person> </actors> <producers> <person> <personid>1451</personid> <name>Betty Thomas</name> <role></role> </person> <person> <personid>1452</personid> <name>Jenno Topping</name> <role></role> </person> </producers> <genre>Komedie</genre> <originaltitle>Surviving Christmas</originaltitle> <productionyear>2004</productionyear> <cinemadate>2004-12-10</cinemadate> <image1>billede4556.jpg</image1> </film> <film> <id>2222</id> <title>Dubie Film</title> <synopsis><![CDATA[Dubie]]></synopsis> <directors> <person> <personid>944</personid> <name>Joe Instrukt</name> <role></role> </person> </directors> <actors> <person> <personid>644</personid> <name>Karoline Skuespil</name> <role>Karolines Rolle</role> </person> <person> <personid>744</personid> <name>Jens Schauspil</name> <role>Jens' Rolle</role> </person> </actors> <producers> <person> <personid>1244</personid> <name>Ususla Ursus</name> <role></role> </person> </producers> <genre>Drama</genre> <originaltitle>Dubie originalfilm</originaltitle> <productionyear>2004</productionyear> <cinemadate>2004-04-04</cinemadate> <image1>billede4444.jpg</image1> </film> </films> Her vil jeg gerne kunne få output, der eksempelvis viser <actors> for hver film: 1111;Surviving Christmas;12;Mike Mitchell; 1111;Surviving Christmas;13;Ben Affleck;Drew Latham 1111;Surviving Christmas;46;Christina Applegate;Alicia Valco 1111;Surviving Christmas;56;James Gandolfini;Tom Valco 2222;Dubie Film;644;Karoline Skuespil;Karolines Rolle 2222;Dubie Film;744;Jens Schauspil;Jens' Rolle Er det muligt?
16. august 2005 - 12:27
#13
selvfølgelig er det muligt, du laver bare <xsl:apply-templates select="//person"> om til <xsl:apply-templates select="//actors/person"> og vil du have producers <xsl:apply-templates select="//producers/person">
16. august 2005 - 12:29
#14
Lige til orientering. Du bør ikke angive dine kommentarer som svar. Svar bruges når man kommer med et bud på løsningen på problemet.
16. august 2005 - 13:00
#15
>Du bør ikke angive dine kommentarer som svar. Svar bruges når man kommer med et bud >på løsningen på problemet. Det var en fejl, beklager.
16. august 2005 - 13:04
#16
Ja ja der sker jo ikke det store ved det, så du behøver ikke beklage :-)
16. august 2005 - 13:06
#17
OK, nu vælger den kun <actors>, men alle <actors> bliver vist på begge film: 1111;Surviving Christmas;13;Ben Affleck;Drew Latham 1111;Surviving Christmas;46;Christina Applegate;Alicia Valco 1111;Surviving Christmas;56;James Gandolfini;Tom Valco 1111;Surviving Christmas;644;Karoline Skuespil;Karolines Rolle 1111;Surviving Christmas;744;Jens Schauspil;Jens' Rolle 2222;Dubie Film;13;Ben Affleck;Drew Latham 2222;Dubie Film;46;Christina Applegate;Alicia Valco 2222;Dubie Film;56;James Gandolfini;Tom Valco 2222;Dubie Film;644;Karoline Skuespil;Karolines Rolle 2222;Dubie Film;744;Jens Schauspil;Jens' Rolle Hvordan skiller jeg <actors> ud, så de kun knyttes på på det <id>, de hører til? 1111;Surviving Christmas;12;Mike Mitchell; 1111;Surviving Christmas;13;Ben Affleck;Drew Latham 1111;Surviving Christmas;46;Christina Applegate;Alicia Valco 1111;Surviving Christmas;56;James Gandolfini;Tom Valco 2222;Dubie Film;644;Karoline Skuespil;Karolines Rolle 2222;Dubie Film;744;Jens Schauspil;Jens' Rolle
16. august 2005 - 13:09
#18
ups ja min fejl :( <xsl:apply-templates select="//actors/person"> skal laves om til <xsl:apply-templates select="actors/person"> det samme skal producers selvfølgelig.
16. august 2005 - 13:10
#19
// søger fra roden af xml documentet.
16. august 2005 - 13:37
#20
Yes! Der var den. Formidabelt. Takker :-)
16. august 2005 - 13:46
#21
det var så lidt
16. august 2005 - 19:07
#22
Sejt :^)
16. august 2005 - 23:07
#23
Ja xsl er meget smart.
Kurser inden for grundlæggende programmering