рджрд┐рди рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдордп!
XML рдкреНрд░рд╛рд░реВрдк рдХрд╛ рджрд╛рдпрд░рд╛ рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд╣реИред CSV, JSON рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде, XML рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдФрд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдмреАрдЪ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо 1 рд╕реА "рдЯреНрд░реЗрдб рдореИрдиреЗрдЬрдореЗрдВрдЯ" рдФрд░ рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдХреЗ рдмреАрдЪ рд╕рд╛рдорд╛рди рдФрд░ рдСрд░реНрдбрд░ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рд╡рд╛рдгрд┐рдЬреНрдп рдПрдордПрд▓ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд▓рдЧрднрдЧ рд╕рднреА рд▓реЛрдЧ рдЬреЛ рд╕рдордп-рд╕рдордп рдкрд░ рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ XML рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЕрдкрдиреА рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ XMLReader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рддрд░реАрдХреЗ рд╕реЗ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред
PHP XML рдлреЙрд░реНрдореЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рджреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдореЗрдореЛрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реЗ XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
- рдЯреИрдЧ, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдкрд╛рда рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕реНрддрд░ рдкрд░ XML рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдкрдврд╝рдирд╛
рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реИ, рдХреЛрдб рдЕрдзрд┐рдХ рдкрд╛рд░рджрд░реНрд╢реА рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдХрдИ рдлрд╛рдпрджреЗ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХреБрдЫ рд╣рдж рддрдХ рдЬреАрд╡рди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рд╣рдо рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВред рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЧрддрд┐ред рдЖрдк рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
- рдХрдо рд░реИрдо рдХрд╛ рдЙрдкрднреЛрдЧред рд╣рдо рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред
рд▓реЗрдХрд┐рди: рд╣рдо рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИ, рддреЛ рдХрд╣реЗрдВ, рдПрдХ рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдПрдордПрд▓ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдЬрдЯрд┐рд▓ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рднреА рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдкреВрд░реНрдг рдкрде рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХрдИ рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдЧрдбрд╝рдмрдбрд╝ рдХреЛрдб рдкрд░ рдЖрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдХрдХреНрд╖рд╛ рд▓рд┐рдЦреА, рдЬрд┐рд╕рдиреЗ рдмрд╛рдж рдореЗрдВ рдореЗрд░реЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓реЗрдЦрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЙрдирдХрд╛ рдЖрдХрд╛рд░ рдХрдИ рдЧреБрдирд╛ рдЫреЛрдЯрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╣реЛрддрд╛ рд╣реИред
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ: рд╣рдо рдЕрдкрдиреЗ рдПрдХреНрд╕рдПрдордПрд▓ рдХреЗ рджреЛрдиреЛрдВ рд╕реНрдХреАрдорд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдПрдХ рдПрдХрд▓ рд╕рд░рдгреА рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрди рдЯреИрдЧреЛрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╣реА рд╕рд░рдгреА рдореЗрдВ рдХрд┐рд╕реА рднреА рдЯреИрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЯреИрдЧ рдЦреЛрд▓рдиреЗ, рдЙрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ, рдкрдврд╝рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ, рдпрд╛ рдкрд╛рда рдкрдврд╝рдиреЗ, рдпрд╛ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЕрдкрдиреЗ XML рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧреА рдХрд┐ рд╣рдо рдЕрдкрдиреА рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛ рдХрд┐ рд╕рд░рд▓ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ (рдиреАрдЪреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ) рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд▓рд╛рдн рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1 рд╕реА рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдирд┐рдордп рдкреНрд░рд╛рд░реВрдкред
рдЕрдм рдмрд╛рд░реА рд╣реИред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд╣реИ:
рдбрд┐рдмрдЧ рд╕рдВрд╕реНрдХрд░рдг ($ рдбрд┐рдмрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде):
XMLReaderStruct рд╡рд░реНрдЧ - рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВclass XMLReaderStruct extends XMLReader { public function xmlStruct($xml, $structure, $encoding = null, $options = 0, $debug = false) { $this->xml($xml, $encoding, $options); $stack = array(); $node = &$structure; $skipToDepth = false; while ($this->read()) { switch ($this->nodeType) { case self::ELEMENT: if ($skipToDepth === false) {
рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг ($ рдбрд┐рдмрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛):
XMLReaderStruct рд╡рд░реНрдЧ - рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ class XMLReaderStruct extends XMLReader { public function xmlStruct($xml, $structure, $encoding = null, $options = 0) { $this->xml($xml, $encoding, $options); $stack = array(); $node = &$structure; $skipToDepth = false; while ($this->read()) { switch ($this->nodeType) { case self::ELEMENT: if ($skipToDepth === false) { if (isset($node[$this->name])) { $stack[$this->depth] = &$node; $node = &$node[$this->name]; if (isset($node["__open"]) && (false === $node["__open"]())) return false; if (isset($node["__attrs"])) { $attrs = array(); if ($this->hasAttributes) while ($this->moveToNextAttribute()) $attrs[$this->name] = $this->value; if (false === $node["__attrs"]($attrs)) return false; } if ($this->isEmptyElement) { if (isset($node["__close"]) && (false === $node["__close"]())) return false; $node = &$stack[$this->depth]; } } else { $skipToDepth = $this->depth; } } break; case self::TEXT: if ($skipToDepth === false) { if (isset($node["__text"]) && (false === $node["__text"]($this->value))) return false; } break; case self::END_ELEMENT: if ($skipToDepth === false) { if (isset($node["__close"]) && (false === $node["__close"]())) return false; $node = &$stack[$this->depth]; } elseif ($this->depth === $skipToDepth) { $skipToDepth = false; } break; } } return true; } }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдорд╛рдирдХ XMLReader рд╡рд░реНрдЧ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реА рдереА:
xmlStruct($xml, $structure, $encoding = null, $options = 0, $debug = false)
рд╡рд┐рдХрд▓реНрдк:
- $ xml, $ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, $ рд╡рд┐рдХрд▓реНрдк : XMLReader :: xml () рдореЗрдВ
- $ рд╕рдВрд░рдЪрдирд╛ : рдПрдХ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ, рдФрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЯреИрдЧ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
- $ рдбрд┐рдмрдЧ : (рдХреЗрд╡рд▓ рдбреАрдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП) рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж)ред
$ рд╕рдВрд░рдЪрдирд╛ рддрд░реНрдХред
рдпрд╣ рдПрдХ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рдВрд░рдЪрдирд╛ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯреИрдЧ рдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рджреЛрд╣рд░рд╛рддреА рд╣реИ, рд╕рд╛рде рд╣реА, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд░рдЪрдирд╛ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди (рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
- "__open" - рдПрдХ рдЯреИрдЧ рдЦреЛрд▓рдиреЗ рдкрд░ рдлрд╝рдВрдХреНрд╢рди - рдлрд╝рдВрдХреНрд╢рди ()
- "__attrs" - рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреИрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) - рдлрд╝рдВрдХреНрд╢рди ($ assocArray)
- "__text" - рдЯреИрдЧ рдХреЗ рдкрд╛рда рдореВрд▓реНрдп рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рд░реНрдп - рдлрд╝рдВрдХреНрд╢рди ($ рдкрд╛рда)
- "__close" - рдПрдХ рдЯреИрдЧ рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╕рдордп рдлрд╝рдВрдХреНрд╢рди - рдлрд╝рдВрдХреНрд╢рди ()
рдпрджрд┐ рдХреЛрдИ рднреА рд╣реИрдВрдбрд▓рд░ рдЭреВрдард╛ рд▓реМрдЯрддрд╛ рд╣реИ, рддреЛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдирд┐рд░рд╕реНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ xmlStruct () рдлрд╝рдВрдХреНрд╢рди рдЧрд▓рдд рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг $ рд╕рдВрд░рдЪрдирд╛ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдмрддрд╛рддреЗ рд╣реИрдВ:
рдЙрджрд╛рд╣рд░рдг 1 рдЬрд┐рд╕рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕ рдХреНрд░рдо рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реБрдПрдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреЛрдИ XML рдлрд╝рд╛рдЗрд▓ рд╣реИ:
<?xml version="1.0" encoding="UTF-8"?> <root> <a attr_1="123" attr_2="456">Abc</a> <b> <x>This is node x inside b</x> </b> <c></c> <d> <x>This is node x inside d</x> </d> <e></e> </root>
$structure = array( 'root' => array( 'a' => array( "__attrs" => function($array) { echo "ATTR ARRAY IS ",json_encode($array),"\r\n"; }, "__text" => function($text) use (&$a) { echo "TEXT a {$text}\r\n"; } ), 'b' => array( "__open" => function() { echo "OPEN b\r\n"; }, "__close" => function() { echo "CLOSE b\r\n"; }, 'x' => array( "__open" => function() { echo "OPEN x\r\n"; }, "__text" => function($text) { echo "TEXT x {$text}\r\n"; }, "__close" => function() { echo "CLOSE x\r\n"; } ) ) ) ); $xmlReaderStruct->xmlStruct($xml, $structure);
рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдо рдореЗрдВ):
рдЬрдбрд╝ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ-> рдП
рдЯреЗрдХреНрд╕реНрдЯ рдлреАрд▓реНрдб рд░реВрдЯ-> рдП
рдореВрд▓ рдЦреЛрд▓рдирд╛-> рдмреА
рдореВрд▓ рдЦреЛрд▓рдирд╛-> b-> x
рдЯреЗрдХреНрд╕реНрдЯ рд░реВрдЯ-> рдмреА-> рдПрдХреНрд╕
рд╕рдорд╛рдкрди рдЬрдбрд╝-> рдмреА-> рдПрдХреНрд╕
рд╕рдорд╛рдкрди рдЬрдбрд╝-> рдмреА
рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдореВрд▓-> d-> x рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд╣рд░ рд╣реИ)
рдЙрджрд╛рд╣рд░рдг 2 рдПрдХ рд╕рд░рд▓ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдп рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИрдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреЛрдИ XML рдлрд╝рд╛рдЗрд▓ рд╣реИ:
<?xml version="1.0" encoding="UTF-8"?> <shop> <record> <id>0</id> <type>product</type> <name>Some product name. ID:0</name> <qty>0</qty> <price>0</price> </record> <record> <id>1</id> <type>service</type> <name>Some product name. ID:1</name> <qty>1</qty> <price>15</price> </record> <record> <id>2</id> <type>product</type> <name>Some product name. ID:2</name> <qty>2</qty> <price>30</price> </record> <record> <id>3</id> <type>service</type> <name>Some product name. ID:3</name> <qty>3</qty> <price>45</price> </record> <record> <id>4</id> <type>product</type> <name>Some product name. ID:4</name> <qty>4</qty> <price>60</price> </record> <record> <id>5</id> <type>service</type> <name>Some product name. ID:5</name> <qty>5</qty> <price>75</price> </record> </shop>
рдпрд╣ рд╕рд╛рдорд╛рди рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрдЬрд╛рдВрдЪреА рдХреА рдЬрд╛рдБрдЪ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдкреНрд░рдХрд╛рд░ (рдЙрддреНрдкрд╛рдж "рдЙрддреНрдкрд╛рдж" рдпрд╛ рд╕реЗрд╡рд╛ "рд╕реЗрд╡рд╛"), рдирд╛рдо, рдорд╛рддреНрд░рд╛ рдФрд░ рдореВрд▓реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдХрд╛рд░реНрдп: рдЪреЗрдХ рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рди рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗред
include_once "xmlreaderstruct.class.php"; $x = new XMLReaderStruct(); $productsSum = 0; $servicesSum = 0; $structure = array( 'shop' => array( 'record' => array( 'type' => array( "__text" => function($text) use (&$currentRecord) { $currentRecord['isService'] = $text === 'service'; } ), 'qty' => array( "__text" => function($text) use (&$currentRecord) { $currentRecord['qty'] = (int)$text; } ), 'price' => array( "__text" => function($text) use (&$currentRecord) { $currentRecord['price'] = (int)$text; } ), '__open' => function() use (&$currentRecord) { $currentRecord = array(); }, '__close' => function() use (&$currentRecord, &$productsSum, &$servicesSum) { $money = $currentRecord['qty'] * $currentRecord['price']; if ($currentRecord['isService']) $servicesSum += $money; else $productsSum += $money; } ) ) ); $x->xmlStruct(file_get_contents('example.xml'), $structure); echo 'Overal products price: ', $productsSum, ', Overal services price: ', $servicesSum;