<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Разработка &#187; xml</title>
	<atom:link href="http://www.job-blog.bullgare.ru/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.job-blog.bullgare.ru</link>
	<description>о программировании и работе</description>
	<lastBuildDate>Fri, 03 Feb 2012 09:42:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Генерация XML из массива</title>
		<link>http://www.job-blog.bullgare.ru/2009/10/%d0%b3%d0%b5%d0%bd%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f-xml-%d0%b8%d0%b7-%d0%bc%d0%b0%d1%81%d1%81%d0%b8%d0%b2%d0%b0/</link>
		<comments>http://www.job-blog.bullgare.ru/2009/10/%d0%b3%d0%b5%d0%bd%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f-xml-%d0%b8%d0%b7-%d0%bc%d0%b0%d1%81%d1%81%d0%b8%d0%b2%d0%b0/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 14:02:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=426</guid>
		<description><![CDATA[Сначала основная подзадача указанной задачи: Нужно генерировать массивы указанной структуры array('#name' => '', '#value' => '', '#attrs' => array(), '#type' => '') Причём входные массивы могут быть различными: &#171;простой тег&#187; array('tag' => 'value') &#171;сложный тег&#187; array('#name' => 'tag', '#value' => 'value') и массив тегов array('tag' => array(array('nested_tag' => array('nested' => 'value1')), array('nested_tag' =>'value2'))) Причём они [...]]]></description>
			<content:encoded><![CDATA[<p>Сначала основная подзадача указанной задачи:<br />
Нужно генерировать массивы указанной структуры</p>
<pre class="code">
array('#name' => '', '#value' => '', '#attrs' => array(), '#type' => '')
</pre>
<p>Причём входные массивы могут быть различными:<br />
&laquo;простой тег&raquo; </p>
<pre class="code">
array('tag' => 'value')
</pre>
<p>&laquo;сложный тег&raquo; </p>
<pre class="code">
array('#name' => 'tag', '#value' => 'value')
</pre>
<p>и массив тегов </p>
<pre class="code">
array('tag' => array(array('nested_tag' => array('nested' => 'value1')), array('nested_tag' =>'value2')))
</pre>
<p>Причём они могут вкладываться друг в друга для генерации сложных XML-структур.<br />
Без <strong>tdd</strong>, ясное дело, не обошлось.<br />
В итоге имеем класс для генерации подобных массивов с тестами к нему.<br />
Все файлы в приложении (<a href='http://www.job-blog.bullgare.ru/wp-content/uploads/2009/10/array2xml.txt'>код самого класса</a>, <a href='http://www.job-blog.bullgare.ru/wp-content/uploads/2009/10/tests.txt'>тесты</a>)</p>
<p>Ну и полный код с примером использования:<br />
<a href='http://www.job-blog.bullgare.ru/wp-content/uploads/2009/10/full_example.txt'>full_example</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2009/10/%d0%b3%d0%b5%d0%bd%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f-xml-%d0%b8%d0%b7-%d0%bc%d0%b0%d1%81%d1%81%d0%b8%d0%b2%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работа с XML-данными в php</title>
		<link>http://www.job-blog.bullgare.ru/2009/09/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-xml-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d0%bc%d0%b8-%d0%b2-php/</link>
		<comments>http://www.job-blog.bullgare.ru/2009/09/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-xml-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d0%bc%d0%b8-%d0%b2-php/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 09:33:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[simplexml]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=336</guid>
		<description><![CDATA[Если на сервере стоит версия php >= 5.0 (а сложно представить другое;)), то удобнее всего пользоваться классом SimpleXML. Здесь я опишу работу с ним. Создание объекта 2 основных способа &#8211; через конструктор и через factory-функцию simplexml_load_string. Второй способ лучше тем, что при ошибке создания объекта вернёт false. Правда, при этом будет выдавать E_WARNING, что не [...]]]></description>
			<content:encoded><![CDATA[<p>Если на сервере стоит версия php >= 5.0 (а сложно представить другое;)), то удобнее всего пользоваться <a href="http://ru2.php.net/manual/en/book.simplexml.php">классом SimpleXML</a>.<br />
Здесь я опишу работу с ним.</p>
<h3>Создание объекта</h3>
<p>2 основных способа &#8211; через <a href="http://ru2.php.net/manual/en/simplexmlelement.construct.php">конструктор</a> и через factory-функцию <a href="http://ru2.php.net/manual/en/function.simplexml-load-string.php">simplexml_load_string</a>.<br />
Второй способ лучше тем, что при ошибке создания объекта вернёт <em>false</em>.<br />
Правда, при этом будет выдавать <em>E_WARNING</em>, что не очень приятно.<br />
Но есть способ побороться с этим &#8211; использовать функцию <a href="http://www.php.net/manual/en/function.libxml-use-internal-errors.php">http://www.php.net/manual/en/function.libxml-use-internal-errors.php</a>, которая запрещает вывод ошибок при парсинге XML-данных и позволяет приложению управляться с ними самому.<br />
Соответственно, создание объекта SimpleXML можно реализовать так:</p>
<pre class="code">
&lt;?php
    public static function parse2Obj($xmlString)
    {
        libxml_use_internal_errors(true);
        $xmlObj = @simplexml_load_string($xmlString);//на всякий случай;)
        if ($xmlObj === false)
            return false;
        return $xmlObj;
    }
</pre>
<h3>Дальнейшая работа с данными</h3>
<p>Далее нужно обработать полученные данные.<br />
Здесь всё достаточно просто: каждый из XML-нодов представляет теперь объект класса SimpleXML.<br />
Т.е. к любому узлу можно обратиться примерно так:</p>
<pre class="code">
$xml->movie[0]->plot;
</pre>
<p>При этом если используются спецсимволы в &laquo;имени свойства&raquo;, то можно сделать так:</p>
<pre class="code">
$xml->movie->{'great-lines'}->line;
</pre>
<p>Для нескольких дочерних элементов можно использовать циклы</p>
<pre class="code">
foreach ($xml->movie as $movie)
{
   echo $movie->plot, '&lt;br /&gt;';
}
</pre>
<p>При этом, правда, есть нюансы &#8211; к примеру, неправильно отрабатывает <em>count($xml->movie)</em>.<br />
Для нормальной работы необходимо использовать метод <a href="http://ru2.php.net/manual/en/simplexmlelement.children.php">children</a> (странное название):</p>
<pre class="code">
$t = $xml->movie->children();
foreach ($t as $movie)
{
   echo $movie->plot, '&lt;br /&gt;;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2009/09/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-xml-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d0%bc%d0%b8-%d0%b2-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

