XSLT vraag - child nodes

Status
Niet open voor verdere reacties.

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 &quot;Ingepland&quot; naar &quot;Acceptatietest&quot;.</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 &quot;Ingepland&quot; naar &quot;Acceptatietest&quot;. 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 &quot;Ingepland&quot; naar &quot;Acceptatietest&quot;. 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 &quot;Ingepland&quot; naar &quot;Acceptatietest&quot;.

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:
Opgelost

En de oplossing';

[XML]<xsl:attribute name="Voortgang">
<xsl:for-each select="*/HistoryLineWorkorder">
<xsl:value-of select="normalize-space(Registration/Created)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(Registration/Createdby)"/>
<xsl:text>
</xsl:text>
<xsl:text> Onderwerp: </xsl:text>
<xsl:value-of select="normalize-space(Subject)"/>
<xsl:text>
</xsl:text>
<xsl:if test="normalize-space(Information)">
<xsl:text> Informatie: </xsl:text>
<xsl:value-of select="normalize-space(Information)"/>
</xsl:if>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:attribute>[/XML]
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan