Честно сказать, я слабо разбираюсь в классах, поэтому, вряд ли сам справлюсь с этой задачей.
Хочу расширить функционал SimpleXML в рамках пробного проекта (добавить в класс две публичные функции).
Как пытаюсь это сделать:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- class ExtSimpleXMLElement extends SimpleXMLElement
- {
- public function construct($data, $options = 0, $data_is_url = false, $ns = "", $is_prefix = false)
- {
- return parent::__construct($data, $options, $data_is_url, $ns, $is_prefix);
- }
- public function collectAttributes($tag, $attributes)
- {
- $found = false;
- foreach ($attributes as $attribute) {
- $output[$attribute] = self::findAttribute($tag, $attribute);
- $found = true;
- }
- }
- }
- public function findAttribute($tag, $attribute)
- {
- return false; //"Функции переданы не все параметры";
- }
- $all_items = self::xpath('//' . $tag);
- $i = 1;
- foreach ($all_items as $item) {
- $item_attributes = $item::attributes();
- $subject = (string)$item_attributes[$attribute];
- $result[$i] = $subject;
- }
- ++$i;
- }
- } else {
- return false; //"Во входном файле не найден тег {$tag}";
- }
- }
- }
- $xmlstr = '<?xml version="1.0" encoding="windows-1251"?><data><muffin name="Super" group="Mega" /></data>';
- $xml = new ExtSimpleXMLElement($xmlstr);
- foreach ($xml->xpath('//muffin') as $muffin) {
- //Что-то делаем с $muffin_box ...
- }