Доступ к одному узлу XML DOM Document - PullRequest
0 голосов
/ 16 ноября 2010

Я совершенно новичок в DOM Documents, в основном я пытаюсь загрузить RSS-канал и выбрать только один узел, а затем сохранить его в XML-файле.

Вот XML, который я загружаю из веб-канала:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>Markets</title>
        <description/>
        <link>http://www.website.com</link>
        <language>en-us</language>
        <copyright>XML Output Copyright</copyright>
        <ttl>15</ttl>
        <pubDate>Tue, 16 Nov 2010 09:38:00 +0000</pubDate>
        <webMaster>admin@website.com</webMaster>
        <image>
            <title>title</title>
            <url>http://www.website.com/images/xmllogo.gif</url>
            <link>http://www.website.com</link>
            <width>144</width>
            <height>16</height>
        </image>


            <item>
                <title>title</title>
                <description>the description goes here
                </description>
                <enclosure url="http://www.website.com/images/image.png" type="image/png"/>

            </item>

    </channel>
</rss>

Вот моя неудачная попытка получить узел <description> и сохранить его в feed.xml:

<?php  

    $feed = new DOMDocument();
    $feed->load('http://www.website.com/directory/directory/cz.c');
    $nodeValue = $feed->getElementsByTagName('description')->item(0)->nodeValue;
    $feed->save("feed.xml");

?>

Так что в основном мне нужно получить тег описания и сохранить его в виде файла XML.

Любая помощь будет признательна, спасибо заранее!

Ответы [ 2 ]

2 голосов
/ 16 ноября 2010

Почти правильно.Чтобы получить "externalXml" узла, вы можете передать узел на saveXml()

$feed = new DOMDocument();
$feed->load('http://www.website.com/directory/directory/cz.c');
$xml = $feed->saveXml($feed->getElementsByTagName('description')->item(0));
file_put_contents("feed.xml", $xml);

Сохранение с file_put_contents не будет включать пролог XML.Обратите внимание, что в вашем примере первый элемент описания пуст, поэтому файл будет содержать <description/>.

. Если вы хотите извлечь узел как автономный XML-документ, вам нужно создать новый DOMDocument и import the DOMNode и затем использование save().

$dom = new DOMDocument($feed->xmlVersion, $feed->xmlEncoding);
$dom->appendChild(
    $dom->importNode(
        $feed->getElementsByTagName('description')->item(0),
        TRUE
    )
);
echo $dom->save('new.xml');
0 голосов
/ 16 ноября 2010
$feed = simplexml_load_file('feed.xml');
$descr=$feed->channel->description;

Попробуйте это

...