[PHP+XML] Excel XML Uitlezen met PHP

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
Ik heb een spreatsheet in excel welke ik graag wil kunnen uitlezen op een linux bak als website als onderdeel van een site. Nu ben ik aan het zoeken gegaan en dingen over parsers gelezen.

Mijn proef xml ziet er als volgt uit, door excel gegenereerd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?xml version="1.0"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>John</Author>
  <LastAuthor>John</LastAuthor>
  <Created>2004-06-18T13:21:09Z</Created>
  <Version>10.4219</Version>
 </DocumentProperties>
 <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
  <DownloadComponents/>
  <LocationOfComponents HRef="file:///\\"/>
 </OfficeDocumentSettings>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>8700</WindowHeight>
  <WindowWidth>15195</WindowWidth>
  <WindowTopX>0</WindowTopX>
  <WindowTopY>120</WindowTopY>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
 </Styles>
 <Worksheet ss:Name="Test">
  <Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="11" x:FullColumns="1"
   x:FullRows="1">
   <Row>
    <Cell><Data ss:Type="String">Nummer</Data></Cell>
    <Cell><Data ss:Type="String">Letter</Data></Cell>
    <Cell><Data ss:Type="String">Kleur</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">1</Data></Cell>
    <Cell><Data ss:Type="String">a</Data></Cell>
    <Cell><Data ss:Type="String">rood</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">2</Data></Cell>
    <Cell><Data ss:Type="String">b</Data></Cell>
    <Cell><Data ss:Type="String">wit</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">3</Data></Cell>
    <Cell><Data ss:Type="String">c</Data></Cell>
    <Cell><Data ss:Type="String">blauw</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">4</Data></Cell>
    <Cell><Data ss:Type="String">d</Data></Cell>
    <Cell><Data ss:Type="String">zwart</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">5</Data></Cell>
    <Cell><Data ss:Type="String">e</Data></Cell>
    <Cell><Data ss:Type="String">geel</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">6</Data></Cell>
    <Cell><Data ss:Type="String">f</Data></Cell>
    <Cell><Data ss:Type="String">groen</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">7</Data></Cell>
    <Cell><Data ss:Type="String">g</Data></Cell>
    <Cell><Data ss:Type="String">paars</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">8</Data></Cell>
    <Cell><Data ss:Type="String">h</Data></Cell>
    <Cell><Data ss:Type="String">rose</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">9</Data></Cell>
    <Cell><Data ss:Type="String">i</Data></Cell>
    <Cell><Data ss:Type="String">bruin</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">0</Data></Cell>
    <Cell><Data ss:Type="String">j</Data></Cell>
    <Cell><Data ss:Type="String">grijs</Data></Cell>
   </Row>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996"
     x:Right="0.78740157499999996" x:Top="0.984251969"/>
   </PageSetup>
   <Selected/>
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>9</ActiveRow>
     <ActiveCol>2</ActiveCol>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>


Nu heb ik gezocht op PHP.net en daar het ik het volgende gevonden:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$file = "data.xml";
$depth = array();

function startElement($parser, $name, $attrs) 
{
   global $depth;
   for ($i = 0; $i < $depth[$parser]; $i++) {
       echo "  ";
   }
   echo "$name\n";
   $depth[$parser]++;
}

function endElement($parser, $name) 
{
   global $depth;
   $depth[$parser]--;
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r"))) {
   die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
   if (!xml_parse($xml_parser, $data, feof($fp))) {
       die(sprintf("XML error: %s at line %d",
                   xml_error_string(xml_get_error_code($xml_parser)),
                   xml_get_current_line_number($xml_parser)));
   }
}
xml_parser_free($xml_parser);
?> 


Alleen dit werkt dus niet. Ik heb geen id waarom niet. Het hoeft alleen de data van dat werkblad weer te geven. Later splits ik dingen wel uit. Ik heb ook overal rondgekeken op php.net, phpfreakz.nl, phpbuilder.com en of course GoT.

[ Voor 26% gewijzigd door drm op 18-06-2004 16:30 . Reden: [code]-tags toegevoegd ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Wat is de output/errors? Uiteraard met error reporting op E_ALL.

Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

Gebruik je PHP 4 of PHP 5 ?
* glashio gaat ervan uit dat de XML met Excel 2003™ gegenereerd is

[ Voor 9% gewijzigd door glashio op 18-06-2004 16:07 . Reden: TYPO ]

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
Het is idd Excell 2003

Het is PHP versie: 4.3.5

Dit is de foutmelding:

Notice: Undefined offset: 2 in G:\blblblblbl\test.php on line 8
WORKBOOK
Notice: Undefined offset: 2 in G:\blblblblbl\test.php on line 12
DOCUMENTPROPERTIES AUTHOR LASTAUTHOR CREATED VERSION OFFICEDOCUMENTSETTINGS DOWNLOADCOMPONENTS LOCATIONOFCOMPONENTS EXCELWORKBOOK WINDOWHEIGHT WINDOWWIDTH WINDOWTOPX WINDOWTOPY PROTECTSTRUCTURE PROTECTWINDOWS STYLES STYLE ALIGNMENT BORDERS FONT INTERIOR NUMBERFORMAT PROTECTION WORKSHEET TABLE ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA ROW CELL DATA CELL DATA CELL DATA WORKSHEETOPTIONS PAGESETUP PAGEMARGINS SELECTED PANES PANE NUMBER ACTIVEROW ACTIVECOL PROTECTOBJECTS PROTECTSCENARIOS

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Wat je ziet klopt in ieders geval wel. Je moet eens zoeken naar een anders stukje code om de XML mee te lezen aangezien deze alleen een functie heeft voor de starttag (bv: <html>) en de eindtag (bv: </html>) maar niet voor het geen hier tussen staat. Daar is een derde functie voor nodig.

Acties:
  • 0 Henk 'm!

  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 17-09 09:56
als ik jou was zou ik het laten parsen door een xslt stylesheet.
dit zou dan je php code kunnen zijn
PHP:
1
2
3
4
5
6
7
<?php
$filename = "stylesheet.xsl";
$xmldoc = domxml_open_file("data.xml");
$xsldoc = domxml_xslt_stylesheet_file($filename);
$result =  $xsldoc->process($xmldoc);
echo $xsldoc->result_dump_mem($result);   
?> 

en de xsl moet je zelf maar ff fabrieken (goede tuts op www.w3schools.com )

[ Voor 8% gewijzigd door cybermans op 18-06-2004 17:21 ]

Strava | Runkeeper | Endomondo (mijn leikr uploads)


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
cybermans schreef op 18 juni 2004 @ 17:20:
als ik jou was zou ik het laten parsen door een xslt stylesheet.
Dan moet je wel die mogelijkheden hebben op je server. Gelukkig worden dit soort zaken in PHP5 standaard :)

Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
djluc schreef op 18 juni 2004 @ 16:27:
Wat je ziet klopt in ieders geval wel. Je moet eens zoeken naar een anders stukje code om de XML mee te lezen aangezien deze alleen een functie heeft voor de starttag (bv: <html>) en de eindtag (bv: </html>) maar niet voor het geen hier tussen staat. Daar is een derde functie voor nodig.
Zou je mij hiermee een stukje op weg kunnen helpen, waarnaar ik zou moeten zoeken bijvoorbeeld, want ik heb al zoveel scripts gezien dat ik onderhand niet meer weet waar ik wel wat aan heb en waaraan niet.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
$file = "data.xml";
$map_array = array(
   "BOLD"    => "B",
   "EMPHASIS" => "I",
   "LITERAL"  => "TT"
);

function startElement($parser, $name, $attrs) 
{
   global $map_array;
   if (isset($map_array[$name])) {
       echo "<$map_array[$name]>";
   }
}

function endElement($parser, $name) 
{
   global $map_array;
   if (isset($map_array[$name])) {
       echo "</$map_array[$name]>";
   }
}

function characterData($parser, $data) 
{
   echo $data;
}

$xml_parser = xml_parser_create();
// use case-folding so we are sure to find the tag in $map_array
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
   die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
   if (!xml_parse($xml_parser, $data, feof($fp))) {
       die(sprintf("XML error: %s at line %d",
                   xml_error_string(xml_get_error_code($xml_parser)),
                   xml_get_current_line_number($xml_parser)));
   }
}
xml_parser_free($xml_parser);
?> 
Dit stukje is vooral relevant:
PHP:
1
2
3
4
function characterData($parser, $data) 
{ 
   echo $data; 
}

[ Voor 14% gewijzigd door djluc op 18-06-2004 22:49 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb een keer uitgebreid (...) de theorie van een XML parser proberen uit te leggen in dit topic.

Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
Ik heb nu hetzelfde wat ik nodig had gemaakt met CSV files. Heeft XML een voordeel boven CSV?

Zo ja, wat zijn deze voor/nadelen.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
CSV zegt niets over de data, xml kan wel iets over de data zeggen.
In bovenstaande voorbeeld zegt xml dus of er een getal of een string in een veld staat, xml zegt dit niet.

Plus dat ik dacht dat als jij een veld vet maakt dat dit in xml ook gewoon te zien is.

[ Voor 61% gewijzigd door Gomez12 op 19-06-2004 22:34 ]


Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
Ik heb het nu werkend gekregen wel met een andere manier, dmv een class, gevonden op phpfreakz.com.

Hier lukt het me wel om de array te splitsen. Maar ik heb het idee dat het erg omslachtig is. Hier volgen de 2 PHP codes:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class ParseXML{
      function GetChildren($vals, &$i) { 
         $children = array(); // Contains node data
         if (isset($vals[$i]['value'])){
            $children['VALUE'] = $vals[$i]['value'];
         } 
         
         while (++$i < count($vals)){ 
            switch ($vals[$i]['type']){
               
            case 'cdata': 
               if (isset($children['VALUE'])){
                  $children['VALUE'] .= $vals[$i]['value'];
               } else {
                  $children['VALUE'] = $vals[$i]['value'];
               } 
            break;
            
            case 'complete':
               if (isset($vals[$i]['attributes'])) {
                  $children[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes'];
                  $index = count($children[$vals[$i]['tag']])-1;
         
                  if (isset($vals[$i]['value'])){ 
                     $children[$vals[$i]['tag']][$index]['VALUE'] = $vals[$i]['value']; 
                  } else {
                     $children[$vals[$i]['tag']][$index]['VALUE'] = '';
                  }
               } else {
                  if (isset($vals[$i]['value'])){
                     $children[$vals[$i]['tag']][]['VALUE'] = $vals[$i]['value']; 
                  } else {
                     $children[$vals[$i]['tag']][]['VALUE'] = '';
                  } 
               }
            break;
            
            case 'open': 
               if (isset($vals[$i]['attributes'])) {
                  $children[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes'];
                  $index = count($children[$vals[$i]['tag']])-1;
                  $children[$vals[$i]['tag']][$index] = array_merge($children[$vals[$i]['tag']][$index],$this->GetChildren($vals, $i));
               } else {
                  $children[$vals[$i]['tag']][] = $this->GetChildren($vals, $i);
               }
            break; 
         
            case 'close': 
               return $children; 
         } 
      }
   }
     
      function GetXMLTree($xmlloc){ 
         if (file_exists($xmlloc)){
            $data = implode('', file($xmlloc)); 
         } else {
            $fp = fopen($xmlloc,'r');
            while(!feof($fp)){
               $data = $data . fread($fp, 1024);
            }
      
            fclose($fp);
         }
      
         $parser = xml_parser_create('ISO-8859-1');
         xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); 
         xml_parse_into_struct($parser, $data, $vals, $index); 
         xml_parser_free($parser); 
      
         $tree = array(); 
         $i = 0; 
      
         if (isset($vals[$i]['attributes'])) {
            $tree[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes']; 
            $index = count($tree[$vals[$i]['tag']])-1;
            $tree[$vals[$i]['tag']][$index] =  array_merge($tree[$vals[$i]['tag']][$index], $this->GetChildren($vals, $i));
         } else {
            $tree[$vals[$i]['tag']][] = $this->GetChildren($vals, $i); 
         }
      return $tree; 
      }
}


PHP:
1
2
3
4
5
6
7
8
9
10
<?
include 'clsParseXML.php';

$xmlparse = &new ParseXML;
$xml = $xmlparse->GetXMLTree('test.xml');

echo "<pre>";
echo $xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'][1]['CELL'][3]['DATA'][0]['VALUE'];
echo "</pre>";
?>


Kan het anders, simpeler?

Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
Hoe kan ik van een array de maximale waarde bepalen. bij SQL doe je dit door voor bijvoorbeeld een loop met:

PHP:
1
for($i = 0; $i < mysql_num_rows($result); $i++)


Maar hoe moet dit met een array in xml, van de volgende vorm, ik heb even voor de vervanging van de mysql een waarde van 5 genomen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
include '../classes/clsParseXML.php';

$xmlparse = &new ParseXML; 
$xml = $xmlparse->GetXMLTree('../XML/Hyperlinks.xml');

//$Lekker= $xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'][1]['CELL'][0]['DATA'][0]['VALUE'];
//$Lekkers= $xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'][1]['CELL'][1]['DATA'][0]['VALUE'];

for($i = 0; $i < 5; $i++)
        {
            $Lekker= $xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'][$i]['CELL'][0]['DATA'][0]['VALUE'];
            $Lekkers= $xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'][$i]['CELL'][1]['DATA'][0]['VALUE'];
            
                     echo $Lekker;
                     echo $Lekkers;
        }


//echo $Lekker;
//echo $Lekkers;


?>


Is hier een bepaalde array optie voor, zodat bijvoorbeeld alle row's in dit workbook geteld kunnen worden?

[ Voor 26% gewijzigd door BSeB op 21-06-2004 23:12 . Reden: Beter beschreven ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je hebt het over het maximum en het tellen van alle rijen? Bedoel je niet COUNT en/og FOREACH ?

Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
De functie Count kan ik wel toepassen. Ben nu alleen aan het bedenken hoe ik dmv een foreach alle cell waardes voor dit worksheet in 1 array kan krijgen waar ik dan de count op kan laten werken?

Ik heb al gekeken op PHP.net. Maar daar maken ze een nieuwe array uit een simpele andere, terwijl het hier gaat om een sub,sub,sub array. Hoe moet het dan, moet ik dan de Key gebruiken?

Ik heb nu dit:

PHP:
1
2
3
4
5
6
7
$lollol= $xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'];

foreach ($xml as $lollol) 
{
   //echo "Waarde: $lollol<br>\n";
   $lollol= count($Wijnlink);
   echo $lollol;


Dit geeft alleen me de waarde 1 terug en dat is dus niet de bedoeling aangezien ik meerdere rijen heb. Wat doe ik fout?

[ Voor 31% gewijzigd door BSeB op 22-06-2004 09:59 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Het klopt toch wel? In dit geval is er toch ook maar 1 rij?

Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
Er zijn meerdere rijen alleen weet ik dus niet hoe ik die kan tellen?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
geef eens je defenitie van een rij a.u.b.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'][$i]['CELL'][0]['DATA'][0]['VALUE']='a'; 
$xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'][$i]['CELL'][1]['DATA'][0]['VALUE']='b';
foreach($xml AS $workbook => $wbsub){
  //debug info
  print_r($sub);
  foreach($wbsub AS $worksheet => $wssub){
    //debug info
    print_r($wssub);
    //hier kunnen nog meer loopjes komen als je wilt.
    //steeds dus weer zo'n foreach gebruiken. 
    //Dan kun je uiteindelijk alle elementen loopen
  }
}

Je kunt dit trouwens ook recursief oplossen maar dat vereist wel iets meet kennis.

[ Voor 44% gewijzigd door djluc op 22-06-2004 18:53 ]


Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
[xml]
<Row>
<Cell><Data ss:Type="Number">6</Data></Cell>
<Cell><Data ss:Type="String">f</Data></Cell>
<Cell><Data ss:Type="String">groen</Data></Cell>
</Row>
[/xml]

In de excel sheet wil ik het aantal <Row> weten, dus niet de celdata, maar alleen de hoeveelheid rows binnen in werkblad.

[ Voor 28% gewijzigd door BSeB op 23-06-2004 15:01 ]


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Misschien voor jou op dit moment niet relevant maar misschien moet je er toch eens naar kijken. Ben sinds een paar dagen met dom bezig uit php 5 en dat is een verademing. Het uitlezen van xml document is daarmee echt een eitje.

Ik gebruikte onderstaand voorbeeld:
http://www.phpgg.nl/index...ule=documentatie&docid=43

En de php documentatie:
http://nl2.php.net/manual/nl/ref.dom.php

Als je de mogelijkheid hebt om met php 5 te werken is het de ideale optie. (ik weet dat er nog geen final release is maar dat zal niet lang meer duren)

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Laat eens een stukje van de array zien die je nu hebt. Dus van bijvoorbeeld 2 rijen.

Acties:
  • 0 Henk 'm!

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 15-08 13:07
Ok, ik zal het zo helder mogelijk proberen uit te leggen:

Ik heb een excell sheet, deze beslaat in .CSV formaat uit de volgende waardes:

Nummer;Letter;Kleur;Naam
1;a;rood;Bas
2;b;wit;Björn
3;c;blauw;lakker
4;d;zwart;
5;e;geel;
6;f;groen;
7;g;paars;
8;h;rose;
9;i;bruin;
0;j;grijs;

Nu staat dit bestand in xml en wil ik bepalen hoeveel rijen er zijn. Zoals we kunnen zien uit de CSV zijn dit er 11 rijen. Dmv de volgende opdracht kan ik de complete array zien:

PHP:
1
2
3
4
include '../classes/clsParseXML.php';

$xmlparse = &new ParseXML; 
$xml = $xmlparse->GetXMLTree('../XML/Namen.xml');


Nu wil ik dus het aantal rijen weten, hiervoor had ik het volgende bedacht, aangezien ik hiermee ook 1 van de waardes kan laten zien:

PHP:
1
2
3
4
5
6
7
8
for($i = 0; $i < 5; $i++)
        {
            $blabla= $xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'][$i]['CELL'][0]['DATA'][0]['VALUE'];
            $blabla_beschrijving= $xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW'][$i]['CELL'][1]['DATA'][0]['VALUE'];
            
                     echo $blabla;
                     echo $blabla_beschrijving;
        }


Dit werkt. Alleen nu wil ik voor die 5 een automatisch gevonden waarde hebben. Dus die 11, alleen dat krijg ik niet voor elkaar want met onderstaande opdracht krijg ik als antwoord steeds 1:

PHP:
1
2
3
4
5
6
7
8
$blabalbla= $xml['WORKBOOK'][0]['WORKSHEET'][0]['TABLE'][0]['ROW';
foreach ($xml as $blablabla)
{
   
   $lol= count($blabalbla);
   echo $lol;
   
}



Ik krijg hier maar geen 11 uit te voorschijn. Misschien kun je met deze uitleg iets meer. Alvast bedankt.
Pagina: 1