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 Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
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