/** * @param string $path * @param bool $throw [optional] * @return string|null * @throws \Df\Core\Exception */ public function descendS($path, $throw = false) { if (!isset($this->{__METHOD__}[$path])) { /** @var X|bool $element */ $element = $this->e()->descend($path); /** @var bool $found */ $found = !is_null($element); if (!$found && $throw) { df_error('В документе XML отсутствует путь «%s».', $path); } $this->{__METHOD__}[$path] = df_n_set($found ? df_leaf_s($element) : null); } return df_n_get($this->{__METHOD__}[$path]); }
/** * 2015-08-08 * Преобразует структуру вида: <СтавкиНалогов> <СтавкаНалога> <Наименование>НДС</Наименование> <Ставка>10</Ставка> </СтавкаНалога> </СтавкиНалогов> * в массив array('НДС' => '10') * @used-by Df_1C_Cml2_Import_Data_Entity_Product::getTaxes() * @param string $path * @param string $keyName * @param string $valueName * @return array(string => string) */ function xpathMap($path, $keyName, $valueName) { /** @var array(string => string) $result */ $result = []; /** @var X[] $nodes */ $nodes = $this->xpathA($path); foreach ($nodes as $node) { /** @var X $node */ $result[df_leaf_sne($node->{$keyName})] = df_leaf_s($node->{$valueName}); } return $result; }
/** * @param CX|null $e [optional] * @param string $default|callable [optional] * @return string */ function df_leaf_sne(CX $e = null, $default = '') { /** @var string $result */ $result = df_leaf_s($e, $default); if (df_empty_string($result)) { df_error('Лист дерева XML должен быть непуст, однако он пуст.'); } return $result; }