Example #1
0
 /** @return X */
 public function e()
 {
     return dfc($this, function () {
         return df_xml_parse($this[self::$P__E]);
     });
 }
Example #2
0
/**
 * 2016-09-01
 * @see df_xml_s()
 * @param string|X $x
 * @return X
 */
function df_xml_x($x)
{
    return $x instanceof X ? $x : df_xml_parse($x);
}
Example #3
0
File: G.php Project: mage2pro/core
 /**
  * 2016-08-31
  * @return string
  */
 private function _p()
 {
     /** @var string $result */
     /**
     * Обратите внимание, что метод ядра Magento CE
     * @see \Magento\Framework\Simplexml\Element::asNiceXml()
     * не сохраняет в документе XML блоки CDATA,
     * а вместо этого заменяет недопустимые для XML символы их допустимыми кодами,
     * например: & => &
     *
     * Также @see \Magento\Framework\Simplexml\Element::asNiceXml()
     * не добавляет к документу заголовок XML: его надо добавить вручную.
     *
     * 2015-02-27
     * Обратите внимание, что для конвертации объекта класса @see SimpleXMLElement в строку
     * надо использовать именно метод @uses SimpleXMLElement::asXML(),
     * а не @see SimpleXMLElement::__toString() или оператор (string)$this.
     *
     * @see SimpleXMLElement::__toString() и (string)$this
     * возвращают непустую строку только для концевых узлов (листьев дерева XML).
     * Пример:
     			<?xml version='1.0' encoding='utf-8'?>
     				<menu>
     					<product>
     						<cms>
     							<class>aaa</class>
     							<weight>1</weight>
     						</cms>
     						<test>
     							<class>bbb</class>
     							<weight>2</weight>
     						</test>
     					</product>
     				</menu>
     * Здесь для $e1 = $xml->{'product'}->{'cms'}->{'class'}
     * мы можем использовать $e1->__toString() и (string)$e1.
     * http://3v4l.org/rAq3F
     * Однако для $e2 = $xml->{'product'}->{'cms'}
     * мы не можем использовать $e2->__toString() и (string)$e2,
     * потому что узел «cms» не является концевым узлом (листом дерева XML).
     * http://3v4l.org/Pkj37
     * Более того, метод @see SimpleXMLElement::__toString()
     * отсутствует в PHP версий 5.2.17 и ниже:
     * http://3v4l.org/Wiia2#v500
     */
     /** @var string $header */
     $header = $this[self::P__SKIP_HEADER] ? '' : df_xml_header($this[self::P__1251] ? 'Windows-1251' : 'UTF-8');
     /** @var X $x */
     $x = df_xml_parse(df_cc_n($header, $this[self::P__DOC_TYPE], sprintf('<%s/>', $this[self::$P__TAG])));
     $x->addAttributes($this[self::P__ATTRIBUTES]);
     $x->importArray($this[self::$P__CONTENTS], $this[self::P__WRAP_IN_CDATA]);
     /** @var bool $pretty */
     $pretty = $this[self::P__PRETTY];
     $result = $this[self::P__SKIP_HEADER] ? $x->asXMLPart() : ($pretty || $this[self::P__1251] ? df_cc_n($header, $pretty ? $x->asNiceXml() : $x->asXMLPart()) : $x->asXML());
     // Убеждаемся, что asXML вернуло строку, а не false.
     df_assert_ne(false, $result);
     /**
      * Символ 0xB (вертикальная табуляция) допустим в UTF-8, но недопустим в XML:
      * http://stackoverflow.com/a/10095901
      */
     $result = str_replace("\v", "&#x0B;", $result);
     if ($this[self::P__1251]) {
         $result = df_1251_to($result);
     }
     if ($this[self::P__REMOVE_LINE_BREAKS]) {
         $result = df_t()->removeLineBreaks($result);
     }
     if ($this[self::P__DECODE_ENTITIES]) {
         $result = html_entity_decode($result, ENT_NOQUOTES, 'UTF-8');
     }
     return $result;
 }