Probleem met variabelen

Status
Niet open voor verdere reacties.

Snarffy

Gebruiker
Lid geworden
23 okt 2009
Berichten
35
ik heb drie xml files en één xsl file:

xml files:

a.xml - hierin staan de namen van de andere twee xml files.

[XML]<?xml-stylesheet href="b.xsl" type="text/xsl"?>
<mergeData newRoot="newRoot">
<fileList>
<fileItem>myFile1.xml</fileItem>
<fileItem>myFile2.xml</fileItem>
</fileList>
</mergeData>[/XML]

myfile1.xml - hierin staan de breedtes van kolommen welke dmv de xsl file gecreeerd moeten worden

[XML]<mergeData newRoot="newRoot">
<kolom>
<breedte_1>200</breedte_1>
</kolom>
<kolom>
<breedte_2>400</breedte_2>
</kolom>
</mergeData>[/XML]

myfile2.xml - hierin staat de data welke gepresenteerd moeten worden in de kolommen

[XML]<mergeData newRoot="newRoot">
<inhoud>
<kolom_1>inhoud kolom 1</kolom_1>
<kolom_2>inhoud kolom 2</kolom_2>
</inhoud>
</mergeData>[/XML]

b.xsl - met het hieronderstaand

[XML]<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<xsl:element name="{mergeData/@newRoot}">
<xsl:apply-templates select="mergeData/fileList/fileItem"/>
</xsl:element>
</xsl:template>
<xsl:template match="@* | node()">
<HTML>
<HEAD>
<STYLE TYPE="text/css">
td {
font-family:"courier New"; font-size:13pt;
}
TABLE {
table-layout: auto;
}
</STYLE>
</HEAD>
<BODY>
<TABLE border="2">
<THEAD>
</THEAD>
<TBODY>
<TR>
<xsl:for-each select="document(.)//mergeData/kolom">
<xsl:variable name="breedte1" select="breedte_1"/>
<xsl:variable name="breedte2" select="breedte_2"/>
</xsl:for-each>
</TR>
<TR>
<xsl:for-each select="document(.)//mergeData/inhoud">
<TD><xsl:attribute name="width"><xsl:value-of select="$breedte1"/></xsl:attribute><xsl:value-of select="kolom_1"/></TD>
<TD><xsl:attribute name="width"><xsl:value-of select="$breedte2"/></xsl:attribute><xsl:value-of select="kolom_2"/></TD>
</xsl:for-each>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>[/XML]

Zodra ik dit geheel uitvoer krijg ik de onderstaande fout :

De XML-pagina kan niet worden weergegeven
Kan XML-invoer niet lezen met opmaakmodel XSL. Herstel de fout en klik vervolgens op de knop Vernieuwen of probeer het later opnieuw.


--------------------------------------------------------------------------------

Kan een verwijzing naar de variabele of parameter breedte1 niet oplossen. De variabele of parameter is mogelijk niet gedefin...

Ik heb al van alles geprobeerd om dit probleem op te lossen maar kom er niet echt uit, de kolom breedtes zouden een top-level variabele moeten zijn maar hoe ik dat voor elkaar moet krijgen is me niet duidelijk. Heeft iemand een suggestie ?

Alvast bedankt.
 
Structuurfout in XSL

Hi,
Even een snel kort antwoord.
Je probeert volgens mij voor elk element een HTML pagina te maken. Het moet eigenlijk iets worden als:
<xsl:template match="/">
<HTML>
<HEAD>
...

Verder kan ik me herinneren dat ik ooit eens zo'n merge actie ben tegen gekomen, dus ik zal morgen kijken of ik de code weer kan vinden op internet. Of anders maar zelf een xsl bouwen die de merge uitvoert.

Tot later,
Rob
 
Hallo Rob,

Leuk dat je reageert, ondertussen ben ik ook begonnen met een merge. Hetgeen ik wil kan eigenlijk alleen zodra de gegevens welke ik nodig heb in één file staan. Dat mergen lukt nu geloof ik wel, moet eea nog verder uit werken. Zodra ik het klaar heb zet ik het op helpmij.

Gr Snarffy
 
Probeem met variabelen - twee xml files als input gebruiken

Na veel gepuzzel ben ik tot een oplossing gekomen zonder gebruik te maken van variabelen, had al eens eerder een poging ondernomen om het op dze wijze te proberen maar de rij onder de eerste had toen afwijkende breedte's.

FileA.txt

[XML]<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="mergeAB.xsl" type="text/xsl"?>
<catalog>
<data>
<breedte_1>200</breedte_1>
<breedte_2>400</breedte_2>
<breedte_3>50</breedte_3>
</data>
</catalog>[/XML]

FileB.txt

[XML]<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<data>
<author>Author1</author>
<date>12/34/5678</date>
<myid>1</myid>
</data>

<data>
<author>Author2</author>
<date>87/65/4321</date>
<myid>2</myid>
</data>

<data>
<author>Author3</author>
<date>8/5/21</date>
<myid>3</myid>
</data>
</catalog> [/XML]

MergeAB.xsl

[XML]<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<HTML>
<HEAD>
<STYLE TYPE="text/css">
td {
font-family:"courier New"; font-size:13pt;
}
TABLE {
table-layout: fixed;
}
th,td {
white-space: pre-line;
nowrap: nowrap;
height: 20;
}
</STYLE>
</HEAD>
<BODY>
<TABLE border='2'>
<xsl:for-each select="/catalog/data">
<THEAD>
<TR>
<TH><xsl:attribute name="width"><xsl:value-of select="breedte_1"/></xsl:attribute><xsl:text>kolom_kop_1</xsl:text></TH>
<TH><xsl:attribute name="width"><xsl:value-of select="breedte_2"/></xsl:attribute><xsl:text>kolom_kop_2</xsl:text></TH>
<TH><xsl:attribute name="width"><xsl:value-of select="breedte_3"/></xsl:attribute><xsl:text>kolom kop 3</xsl:text></TH>
</TR>
</THEAD>
</xsl:for-each>
<xsl:for-each select="document('FileB.xml')/catalog/data">
<TBODY>
<TR>
<TD><xsl:value-of select="author"/></TD>
<TD><xsl:value-of select="date"/></TD>
<TD><xsl:value-of select="myid"/></TD>
</TR>
</TBODY>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>[/XML]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan