За последние 24 часа нас посетили 19283 программиста и 1605 роботов. Сейчас ищут 813 программистов ...

Конвертер XML

Тема в разделе "PHP для новичков", создана пользователем AkiraDio, 6 июн 2012.

  1. AkiraDio

    AkiraDio Активный пользователь

    С нами с:
    31 окт 2011
    Сообщения:
    25
    Симпатии:
    0
    Прошу помощи!

    Нужно эту xml http://ntdtv.ru/xml/content/all/news.xml отредактировать, получить
    на выходе новую xml. Столкнулся вот с такой проблемой, с XML я на php не работал...
    Как это надо сделать :

    1. содержимое тега <article> присвоить в новой xml тегу <description>


    2. description в новой xml должен быть в <![CDATA[ ]]

    3. Содержимое тега <video> должно быть перенесено в description в виде кода плеера, примерно так:

    <object type="application/x-shockwave-flash"
    data="ЗНАЧЕНИЕ ТЕГА video " width="400" height="300">
    <param name="quality" value="high">
    <param name="wmode" value="opaque">
    </object>
    4. Значение тега <image> в новой xml должно быть перенесено в <enclousure>

    Объясните хотя бы 1й пункт, а там я уж сам. Перерыл много инета, но как применить к моему случаю не знаю. Прошу не кидать мне ссылки на маны...
     
  2. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Таки мана http://www.php.ru/manual/class.xsltprocessor.html

    Добавлено спустя 6 минут 3 секунды:
    Код (PHP):
    1. <?php
    2. header("Content-type: text/xml");
    3. $doc = new DOMDocument();
    4. $doc->load('news.xml'); //твой xml
    5. $xsl= new DOMDocument();
    6. $xsl->load('news.xsl'); //твой xslt-шаблон
    7. $proc= new XSLTProcessor();
    8. $proc->importStyleSheet($xsl);
    9. echo $proc->transformToXML($doc);
    10. ?>
    Добавлено спустя 11 минут 37 секунд:
    Для того, чтобы с урла грузить - можно попробовать так:
    Код (PHP):
    1. $doc->loadXML(file_get_contents($url)); 
    Добавлено спустя 36 минут 27 секунд:Шаблон news.xsl
    Код (PHP):
    1. <?xml version="1.0" encoding="UTF-8"?>
    2.     <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3.         <xsl:output method="xml" encoding="utf-8" indent="yes"/>
    4.  
    5. код шаблона
    6.  
    7.     </xsl:stylesheet>
    раздупляем для начала корневой тег xml-а:
    Код (PHP):
    1. <?xml version="1.0" encoding="UTF-8"?>
    2.     <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3.         <xsl:output method="xml" encoding="utf-8" indent="yes"/>
    4.             <xsl:template match="rss">
    5.  
    6.             </xsl:template>
    7.     </xsl:stylesheet> 
    Потом для каждого item... короче:

    Код (PHP):
    1. <?xml version="1.0" encoding="UTF-8"?>
    2.     <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3.         <xsl:output method="xml" encoding="utf-8" indent="yes"/>
    4.             <xsl:template match="rss">
    5.                 <rss2 version="2.0">
    6.                     <xsl:apply-templates select="channel"/>
    7.                 </rss2>
    8.             </xsl:template>
    9.             
    10.             
    11.             <xsl:template match="channel">
    12.                 <channel>
    13.                     <title>
    14.                         <xsl:value-of select="title" />
    15.                     </title>
    16.                     <link>
    17.                         <xsl:value-of select="link" />
    18.                     </link>
    19.                     <description>
    20.                         <xsl:value-of select="description" />
    21.                     </description>
    22.                     <xsl:apply-templates select="item"/>
    23.                 </channel>
    24.             </xsl:template>
    25.             
    26.             <xsl:template match="item">
    27.                 <item>
    28.                     <xsl:attribute name="id">
    29.                         <xsl:value-of select="@id" />
    30.                     </xsl:attribute>
    31.                     <title>
    32.                         <xsl:value-of select="title" />
    33.                     </title>
    34.                     <pubDate>
    35.                         <xsl:value-of select="pubDate" />
    36.                     </pubDate>
    37.                     <guid>
    38.                         <xsl:attribute name="isPermaLink">
    39.                             <xsl:value-of select="guid/@isPermaLink" />
    40.                         </xsl:attribute>
    41.                     </guid>
    42.                     <link>
    43.                         <xsl:value-of select="link" />
    44.                     </link>
    45.                     <description>
    46.                         <xsl:value-of select="article" />
    47.                         <xsl:value-of select="description" />
    48.                     </description>
    49.                 </item>
    50.             </xsl:template>
    51.             
    52.     </xsl:stylesheet>

    Ну а там ты уже сам. Почитай книжечки по xml, по xslt и по xpath, чтобы легче было въехать. Читать придется много и по несколько раз, потому что xslt - язык с высоким порогом вхождения, это тебе не в php говнокодить. Но за месяц освоишь.

    Работоспособность не проверял, так что если косяки полезут - пиши.

    Добавлено спустя 7 минут 3 секунды:
    Так-же пригодятся disable-output-escaping="yes", чтобы html-сущностями не заменяло
    <xsl:copy-of select="" /> - чтобы оставить cdat-у
    но предварительно надо элемент прописать в output, в атрибут cdata-section-elements