Withaar
Verenigingslid
- Lid geworden
- 8 apr 2001
- Berichten
- 3.551
Ik heb een XML file die eerst nog via een XSLT omgezet moet worden.
In de file zit ook een deel dat meerder keren terug kan komen, het gaat dan om historylines.
Op dit moment gebruik is de volgende XSLT code;
[XML] <xsl:attribute name="History">
<xsl:for-each select="*/HistoryLine">
<xsl:value-of select="normalize-space(.)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:attribute>
[/XML]
Hiermee selecteer gewoon alle waarden die ik tegen kom om het niveau HistoryLine, maar ik zou de gegevens iets gecontroleerder willen uitvragen en herschikken.
De XML ziet er als volgt uit;
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<OO>
<SA version="4">
<Archief naam=test.xml>
<WO lacalName="WO">
<HistoryLines localName="History" type="Set">
<HistoryLine localName="Voortgangsregel">
<Registration localName="Registratie" type="Reference">
<Created localName="Aangemaakt" type="Date"> 05/05/09 15:04 </Created>
<Createdby localName="Aangemaakt door" type="Reference">
<DisplayName localName="Schermnaam" type="Text"> A.Boer </DisplayName>
</Createdby>
</Registration>
<Subject localName="Onderwerp" type="Text"> Test </Subject>
<Information localName="Informatie" type="Text"> Bezig met testen </Information>
<ObjectId localName="ID" type="Number"> 281522509317296 </ObjectId>
</HistoryLine>
<HistoryLine localName="Voortgangsregel">
<Registration localName="Registratie" type="Reference">
<Created localName="Aangemaakt" type="Date"> 05/05/09 15:38 </Created>
<Createdby localName="Aangemaakt door" type="Reference">
<DisplayName localName="Schermnaam" type="Text"> B.Carlo </DisplayName>
</Createdby>
</Registration>
<Subject localName="Onderwerp" type="Text"> Status van "Ingepland" naar "Acceptatietest".</Subject>
<Information localName="Informatie" type="Text"> </Information>
<ObjectId localName="ID" type="Number"> 281522509317300 </ObjectId>
</HistoryLine>
</HistoryLines>
</WO>
</Archief>
</SA>
</OO>
[/XML]
De output wordt nu;
05/05/09 15:04 A.Boer Test Bezig met testen 281522509317296
05/05/09 15:38 B.Carlo Status van "Ingepland" naar "Acceptatietest". 281522509317300
Wat ik graag zou willen hebben is;
05/05/09 15:04 A.Boer Onderwerp: Test Informatie: Bezig met testen
05/05/09 15:38 B.Carlo Onderwerp: Status van "Ingepland" naar "Acceptatietest". Informatie:
Dus 'hardcoded' teksten Onderwerp: en Informatie: op de juiste plek er bij en zonder het ID nummer er achter.
N.b. als Informatie: er optioneel bij kan afhankelijk of het veld informatie bevat zou dat helemaal mooi zijn.
{edit}
Eerste stap heb ik zelf al kunnen zetten;
[XML]
<xsl:attribute name="V1">
<xsl:for-each select="*/HistoryLine/Registration">
<xsl:value-of select="normalize-space(Created)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(Createdby)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:attribute>
<xsl:attribute name="V2">
<xsl:for-each select="*/HistoryLine">
<xsl:value-of select="normalize-space(Subject)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(Information)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:attribute>[/XML]
Geeft;
05/05/09 15:04 A.Boer
Test Bezig met testen
05/05/09 15:38 B.Carlo
Status van "Ingepland" naar "Acceptatietest".
Nou dit nog weer samen voegen tot één variabele.
{Edit}
Bleek ook nog wel mee te vallen, nu de if m.b.t. de Information node nog.
[XML]
<xsl:attribute name="V1">
<xsl:for-each select="*/HistoryLine">
<xsl:value-of select="normalize-space(Registration/Created)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(Registration/Createdby)"/>
<xsl:text> Onderwerp: </xsl:text>
<xsl:value-of select="normalize-space(Subject)"/>
<xsl:text> Informatie: </xsl:text>
<xsl:value-of select="normalize-space(Information)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:attribute>
[/XML]
In de file zit ook een deel dat meerder keren terug kan komen, het gaat dan om historylines.
Op dit moment gebruik is de volgende XSLT code;
[XML] <xsl:attribute name="History">
<xsl:for-each select="*/HistoryLine">
<xsl:value-of select="normalize-space(.)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:attribute>
[/XML]
Hiermee selecteer gewoon alle waarden die ik tegen kom om het niveau HistoryLine, maar ik zou de gegevens iets gecontroleerder willen uitvragen en herschikken.
De XML ziet er als volgt uit;
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<OO>
<SA version="4">
<Archief naam=test.xml>
<WO lacalName="WO">
<HistoryLines localName="History" type="Set">
<HistoryLine localName="Voortgangsregel">
<Registration localName="Registratie" type="Reference">
<Created localName="Aangemaakt" type="Date"> 05/05/09 15:04 </Created>
<Createdby localName="Aangemaakt door" type="Reference">
<DisplayName localName="Schermnaam" type="Text"> A.Boer </DisplayName>
</Createdby>
</Registration>
<Subject localName="Onderwerp" type="Text"> Test </Subject>
<Information localName="Informatie" type="Text"> Bezig met testen </Information>
<ObjectId localName="ID" type="Number"> 281522509317296 </ObjectId>
</HistoryLine>
<HistoryLine localName="Voortgangsregel">
<Registration localName="Registratie" type="Reference">
<Created localName="Aangemaakt" type="Date"> 05/05/09 15:38 </Created>
<Createdby localName="Aangemaakt door" type="Reference">
<DisplayName localName="Schermnaam" type="Text"> B.Carlo </DisplayName>
</Createdby>
</Registration>
<Subject localName="Onderwerp" type="Text"> Status van "Ingepland" naar "Acceptatietest".</Subject>
<Information localName="Informatie" type="Text"> </Information>
<ObjectId localName="ID" type="Number"> 281522509317300 </ObjectId>
</HistoryLine>
</HistoryLines>
</WO>
</Archief>
</SA>
</OO>
[/XML]
De output wordt nu;
05/05/09 15:04 A.Boer Test Bezig met testen 281522509317296
05/05/09 15:38 B.Carlo Status van "Ingepland" naar "Acceptatietest". 281522509317300
Wat ik graag zou willen hebben is;
05/05/09 15:04 A.Boer Onderwerp: Test Informatie: Bezig met testen
05/05/09 15:38 B.Carlo Onderwerp: Status van "Ingepland" naar "Acceptatietest". Informatie:
Dus 'hardcoded' teksten Onderwerp: en Informatie: op de juiste plek er bij en zonder het ID nummer er achter.
N.b. als Informatie: er optioneel bij kan afhankelijk of het veld informatie bevat zou dat helemaal mooi zijn.
{edit}
Eerste stap heb ik zelf al kunnen zetten;
[XML]
<xsl:attribute name="V1">
<xsl:for-each select="*/HistoryLine/Registration">
<xsl:value-of select="normalize-space(Created)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(Createdby)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:attribute>
<xsl:attribute name="V2">
<xsl:for-each select="*/HistoryLine">
<xsl:value-of select="normalize-space(Subject)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(Information)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:attribute>[/XML]
Geeft;
05/05/09 15:04 A.Boer
Test Bezig met testen
05/05/09 15:38 B.Carlo
Status van "Ingepland" naar "Acceptatietest".
Nou dit nog weer samen voegen tot één variabele.
{Edit}
Bleek ook nog wel mee te vallen, nu de if m.b.t. de Information node nog.
[XML]
<xsl:attribute name="V1">
<xsl:for-each select="*/HistoryLine">
<xsl:value-of select="normalize-space(Registration/Created)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(Registration/Createdby)"/>
<xsl:text> Onderwerp: </xsl:text>
<xsl:value-of select="normalize-space(Subject)"/>
<xsl:text> Informatie: </xsl:text>
<xsl:value-of select="normalize-space(Information)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:attribute>
[/XML]
Laatst bewerkt: