XML processing

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
MicroSun
Forum Newbie
Posts: 3
Joined: Mon Dec 12, 2005 2:48 am

XML processing

Post by MicroSun »

Hello,

I made a small script to see how XML processing works inside. The code works but I don't understand one point. After opening an element why the xml_set_character_data_handler() function is called twice.

Here is my code:

Code: Select all

<?php

function opening_element($parser, $element, $attributes) {
  $attr='';
  foreach ($attributes as $key => $value) $attr .= $key." : ".$value." - ";
  echo " --> opening_element element is: $element , attribute is: $attributes ($attr) <br/>";
}

function closing_element($parser, $element) {
  echo " --> closing_element element is: $element<br/>";
}

function character_data($parser, $data) {
  echo " --> character_data data is: $data<br/>";
}

$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler($parser, "opening_element", "closing_element");
xml_set_character_data_handler($parser, "character_data");

$document = file("test.xml");

foreach ($document as $line) {
  xml_parse($parser, $line);
}

xml_parser_free($parser);
?>
The XML file:

Code: Select all

<test>
  <item name="demo">My item</item>
</test>
And the output:

Code: Select all

1. --> opening_element element is: test , attribute is: Array () 
2. --> character_data data is: 
3. --> character_data data is: 
4. --> opening_element element is: item , attribute is: Array (name : demo - ) 
--> character_data data is: My item
--> closing_element element is: item
--> character_data data is: 
--> closing_element element is: test
The 1. line is OK. The 2. one is OK too. But why is the 3. line? The 4. is OK again.

I would expect 1.,2.,4.,

Any idea?

Thanks!
User avatar
Benjamin
Site Administrator
Posts: 6935
Joined: Sun May 19, 2002 10:24 pm

Post by Benjamin »

No clue, maybe it's the 2 spaces before <item>?
Post Reply