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:
<?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:
<test>
<item name="demo">My item</item>
</test>
And the output:
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!