White cat - Справочник по PHP
Замечание: SimpleXML содержит правило добавления итеративных свойств к большинству методов. Они не могут быть просмотрены с использованием var_dump() или каких-либо других средств анализа объектов.
Пример 1. Использование метода children()
<?php
$xml = simplexml_load_string(
'<sites>
<site name="spravkaweb.ru">
<site name="links.spravkaweb.ru" />
<site name="forum.spravkaweb.ru" />
<site name="server.spravkaweb.ru" />
</site>
<site name="yandex.ru">
<site name="money.yandex.ru" />
<site name="map.yandex.ru" />
<site name="market.yandex.ru" />
</site>
</sites>');
echo '<ul>';
foreach ($xml->children() as $site) {
echo '<dt>' . $site['name'];
foreach ($site->children() as $subsite) {
echo '<dd>' . $subsite['name'];
}
}
echo '</ul>';
?>
Данный пример выведет:
spravkaweb.ru links.spravkaweb.ru forum.spravkaweb.ru server.spravkaweb.ruyandex.ru money.yandex.ru map.yandex.ru market.yandex.ru
xpath
SimpleXMLElement-xpath
SimpleXMLElement-xpath -- Выполняет Xpath-запрос к XML-данным
Описание
array SimpleXMLElement->xpath ( string path )
Метод xpath ищет дочерние элементы элемента SimpleXML, путь к которому указан в параметре path. Метод возвращает массив объектов SimpleXMLElement.
Пример 1. Xpath
<?php
$string = <<<XML
<a>
<b>
<c>text</c>
<c>stuff</c>
</b>
<d>
<c>code</c>
<b>
<c>plain</c>
</b>
</d>
</a>
XML;
$xml = simplexml_load_string($string);
/* Поиск по <a><b><c> */
$result = $xml->xpath('/a/b/c');
foreach ($result as $node) {
echo '/a/b/c: ' . $node . '<BR>';
}
/* Относительные дорожки также работают ... */
$result = $xml->xpath('b/c');
foreach ($result as $node) {
echo 'b/c: ' . $node . '<BR>';
}
?>
Данный скрипт выведет:
/a/b/c: text/a/b/c: stuffb/c: textb/c: stuff
Два результата в данном случае одинаковы.
simplexml_import_dom
simplexml_import_dom
(PHP 5)
simplexml_import_dom -- Возвращает объект SimpleXMLElement, созданный из DOM-объекта.
Описание
SimpleXMLElement simplexml_import_dom ( DOMNode node [, string class_name] )
Данная функция берет объект DOM и создает на его основе объект SimpleXML. Этот новый объект может быть использован как нормальный объект SimpleXML. Если во время создания объекта произошли ошибки, метод вернет false.
Пример 1. Import DOM
<?php
$dom = new domDocument;
$dom->loadXML('<sites><site><url>spravkaweb.ru</url></site></sites>');
if (!$dom) {
echo 'Ошибка парсинга документа!';
exit;
}
$s = simplexml_import_dom($dom);
echo $s->site[0]->url; // spravkaweb.ru
?>
simplexml_load_file
simplexml_load_file
(PHP 5)
simplexml_load_file -- Интерпретирует XML-файл в объект
Описание
object simplexml_load_file ( string filename [, string class_name [, int options]] )
Эта функция интерпретирует файл filename с правильно сформированными XML-данными в объект SimpleXMLElement. Если в XML-данных имеются ошибки, функция возвратит FALSE.
Вы можете использовать необязательный параметр class_name в функции simplexml_load_file() для того, чтобы функция вернула объект указанного класса. При этом класс должен быть расширением класса SimpleXMLElement.
Начиная с PHP 5.1.0 и Libxml 2.6.0 вы можете использовать необязательный параметр options, спецификация которого описана в additional Libxml parameters.
Замечание: Libxml 2 преобразовывает URL к правильному виду. Т.е. если вы хотите присвоить переменной а значение b&c в URL-строке, вам не обязательно делать: simplexml_load_file(rawurlencode('http://example.com/?a=' . urlencode('b&c'))). Начиная с PHP 5.1.0 это делается в автоматическом режиме.
Пример 1. Интерпретация XML документа
<?php
// Файл test.xml содержит XML документ с корневым элементом
// и вложенным элементом title /[root]/title.
if (file_exists('test.xml')) {
$xml = simplexml_load_file('test.xml');
var_dump($xml);
} else {
exit('Ошибка открытия test.xml.');
}
?>
Этот пример выведет следующее:
SimpleXMLElement Object( [title] => Тестовый заголовок ...)
В данном примере вы можете обратиться к элементу title следующим образом: $xml-title.
Смотрите также:
simplexml_load_string()
simplexml_load_string
simplexml_load_string
(PHP 5)
simplexml_load_string -- Интерпретирует строку с XML в объект
Описание
object simplexml_load_string ( string data [, string class_name [, int options]] )
Эта функция берет "правильный" XML-документ, находящийся в строке data и возвращает объект класса SimpleXMLElement, имеющий свойства, равные содержимому xml-документа. Если XML-документ имеет ошибки, функция возвратит FALSE.
Вы можете использовать необязательный параметр class_name для того, чтобы функция simplexml_load_string() вернула объект заданного класса. Этот класс должен расширять класс SimpleXMLElement.
Начиная с PHP 5.1.0 и Libxml 2.6.0, вы можете также использовать необязательный параметр options, содержимое которого определено в additional Libxml parameters.
Пример 1. Преобразование XML-строки
<?php
$string = <<<XML
<?xml version='1.0'?>
<document>
<title>Forty What?</title>
<from>Joe</from>
<to>Jane</to>
<body>
I know that's the answer -- but what's the question?
</body>
</document>
XML;
$xml = simplexml_load_string($string);
var_dump($xml);
?>
Этот пример выведет:
SimpleXMLElement Object( [title] => Forty What? [from] => Joe [to] => Jane [body] => I know that's the answer -- but what's the question?)
В этом примере вы можете также использовать конструкции $xml-body и т.д.
Символические ссылки. Жесткие ссылки.
Немного теории
В системах Unix довольно часто возникает необходимость иметь для одного и того же файла или каталога разные имена. При этом одно из имен логично назвать основным, а все другие - его псевдонимами. В терминологии Unix такие псевдонимы называются символическими ссылками.
Символическая ссылка - это просто бинарный файл специального вида, который содержит ссылку на основной файл. При обращении к такому файлу (например, открытию его на чтение) система "соображает", к какому объекту на самом деле запрашивается доступ, и прозрачно его обеспечивает. Это означает, что мы можем использовать символические ссылки точно так же, как и обычные файлы. Однако иногда нужно бывает работать со ссылкой именно как со ссылкой, а не как с файлом. Для этого и существуют перечисленные ниже функции PHP.
Жесткие ссылки
Создание символической ссылки - не единственный способ задать для одного файла несколько имен. Главный недостаток символических ссылок - существование основного имени файла, на которое все и ссылаются. Попробуйте удалить этот файл - и вся "паутина" ссылок, если таковая имелась, развалиться на куски. Есть и другой недостаток: открытие файла, на который указывает ссылка, происходит несколько медленнее, т.к. системе нужно проанализировать содержимое ссылки и установить связь с "настоящим" файлом. Особенно это чувствуется, если одна ссылка указывает на другую, а та на третью и т.д. уровней на 10.
Жесткие ссылки позволяют вам иметь для одного файла несколько совершенно равноправных имен, причем доступ по ним осуществляется одинаково быстро. При этом, если одно из таких имен будет удалено, то сам файл удалиться только в том случае, если данное имя было последним, и других имен у файла нет.
Зарегистрировать новое имя у файла (то есть создать для него жесткую ссылку) можно с помощью функции link(). Ее синтаксис полностью идеентичен функции symlink(), да и работает она по тем же правилам, за исключением того, что создает не символическую, а жесткую ссылку.
readlink
Возвращает имя основного файла.
Синтаксис:
string readlink(string $linkname)
Возвращает имя основного файла, с которым связан его синоним $linkname. Это бывает полезно, если вы хотите узнать основное имя файла, чтобы, например, удалить сам файл, а не ссылку на него. В случае ошибки функция возвращает значение "ложь".
symlink
Создает символическую ссылку.
Синтаксис:
bool symlink(string $target, string $link)
Эта функция создает символическую ссылку с именем $link на объект (файл или каталог), заданную в $target. В случае "провала" функция возвращает false.