String aan string toevoegen als nieuwe stringnaam
Het enige verschil tussen de secties in de XML file zijn de de nummers van de velden (01 t/m 20).
Hier is een stukje van de XML file:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<LijstAdmin>
<plaats_01>01</plaats_01>
<van_01></van_01>
<band_01></band_01>
<album_01>test1</album_01>
<leverancier1_01></leverancier1_01>
<leverancier1_link_01></leverancier1_link_01>
<leverancier2_01></leverancier2_01>
<leverancier2_link_01></leverancier2_link_01>
<progstreaming_01></progstreaming_01>
<plaats_02>02</plaats_02>
<van_02></van_02>
<band_02></band_02>
<album_02></album_02>
<leverancier1_02></leverancier1_02>
<leverancier1_link_02></leverancier1_link_02>
<leverancier2_02></leverancier2_02>
<leverancier2_link_02></leverancier2_link_02>
<progstreaming_02></progstreaming_02>
<plaats_01>01</plaats_01>
<van_01></van_01>
<band_01></band_01>
<album_01>test1</album_01>
<leverancier1_01></leverancier1_01>
<leverancier1_link_01></leverancier1_link_01>
<leverancier2_01></leverancier2_01>
<leverancier2_link_01></leverancier2_link_01>
<progstreaming_01></progstreaming_01>
<plaats_02>02</plaats_02>
<van_02></van_02>
<band_02></band_02>
<album_02></album_02>
<leverancier1_02></leverancier1_02>
<leverancier1_link_02></leverancier1_link_02>
<leverancier2_02></leverancier2_02>
<leverancier2_link_02></leverancier2_link_02>
<progstreaming_02></progstreaming_02>
etc.
Ik wil met een for loop de pagina opbouwen en de secties laten zien.
Dit is de code om de XML uit te lezen, en dat werkt goed.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (file_exists('../media/list.xml')) {
$xml = simplexml_load_file('../media/list.xml');
// print_r($xml);
} else {
exit('Failed to open list.xml.');
}
// Read Key ($key) and load value into $keyValue
foreach($xml as $key =>$keyValue)
{
// $key holds the name of the key we want to read in the string with that name
$$key=$keyValue;
// String $$key is now the actual variable (key) and hold the value in $keyValue
}
// All lines are red, defined as variable and that variable hold the actual value
$xml = simplexml_load_file('../media/list.xml');
// print_r($xml);
} else {
exit('Failed to open list.xml.');
}
// Read Key ($key) and load value into $keyValue
foreach($xml as $key =>$keyValue)
{
// $key holds the name of the key we want to read in the string with that name
$$key=$keyValue;
// String $$key is now the actual variable (key) and hold the value in $keyValue
}
// All lines are red, defined as variable and that variable hold the actual value
Wanneer ik een echo doe van $plaats_01, dan krijg ik netjes de waarde van dat veld te zien.
Omdat de velden in de XML file zich herhalen, wil ik maar 1 maal de tabel opbouwen en deze in een for loop herhalen.
Hiervoor wil het liefst de variabele $plaats_01 samenstellen uit de vaste waard ($plaats_) en de waarde van $x.
Beschouw de regel <plaats_01>01</plaats_01> in de XML file en de sectie erop <plaats_02>02</plaats_02>
Ik wil de string $plaats_01 laten samenstellen uit $plaats_ en $x.
Waarschijnlijk is er een eenvoudige methode voor. Alleen kan ik er niet op komen.
Hieronder een stukje van de code om de tabel 20 maal op te bouwen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for ($x=01; $x<=20; $x++)
{
$x=str_pad($x, 2, 0, STR_PAD_LEFT);
echo '
<!-- Define form with all entries and set accordingly the list.xml file -->
<form action="./submit.php" method="post" enctype="multipart/form-data">
<table border=1 width="100%">
<tr>
<td width="25px">
<b>' . $plaats_ . $x . '</b>
</td>
...
...
';
}
{
$x=str_pad($x, 2, 0, STR_PAD_LEFT);
echo '
<!-- Define form with all entries and set accordingly the list.xml file -->
<form action="./submit.php" method="post" enctype="multipart/form-data">
<table border=1 width="100%">
<tr>
<td width="25px">
<b>' . $plaats_ . $x . '</b>
</td>
...
...
';
}
etc.
Wie geeft me een tip om verder te kunnen.
Ik kan de code natuurlijk 20 keer kopieeren. Daar is echter geen uitdaging aan.
Code (php)
Overigens zou ik het probleem (indien mogelijk) al bij de XML aanpakken, want de structuur daarvan is, laten we zeggen, suboptimaal...
Gewijzigd op 11/10/2014 02:22:15 door Willem vp
Willem vp op 11/10/2014 02:13:36:
Toevoeging op 11/10/2014 11:28:31:
Willem,
bedankt en wat zeg je dat subtiel: Suboptimaal.
Ik zal eens nadenken wat je er mee bedoelt en hoe ik dat kan aanpakken. Bij de bron het probleem aanpakken is altijd beter.
Ook ga ik stoeien met het stukje script.
Wat ik bedoel qua structuur is iets in de richting van:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<LijstAdmin>
<Item>
<plaats>01</plaats>
<van></van>
<band></band>
<album>test1</album>
<leveranciers>
<leverancier>
<naam></naam>
<link></link>
</leverancier>
<leverancier>
<naam></naam>
<link></link>
</leverancier>
</leveranciers>
<progstreaming></progstreaming>
</Item>
<Item>
[etc]
</Item>
</LijstAdmin
<Item>
<plaats>01</plaats>
<van></van>
<band></band>
<album>test1</album>
<leveranciers>
<leverancier>
<naam></naam>
<link></link>
</leverancier>
<leverancier>
<naam></naam>
<link></link>
</leverancier>
</leveranciers>
<progstreaming></progstreaming>
</Item>
<Item>
[etc]
</Item>
</LijstAdmin
en hier zijn ook weer verschillende varianten op mogelijk. Je XML-parser zal een iets uitgebreidere/ingewikkelder datastructuur geven, maar die schaalt dan wel beter als je ooit eens besluit om niet 20 maar 10 of 40 items in je XML op te nemen. Of 5 leveranciers.
Wat ik bedoel met "verschillende varianten": je zou bijvoorbeeld je leveranciers op deze manier kunnen opnemen:
Vooral de tweede variant spreek me aan. Omdat die ook leesbaar blijft voor een (andere) leek.
Ik heb ook naar de sprintf() functie gekeken. Ik had geen idee dat die hiervoor gebruikt kon worden omdat ik er nog nooit mee te maken had. Erg krachtig.
Voor beginners toch wel intimiderend.