Tak z ciekawości, po otrzymaniu XML (mam nadzieję didnt't Zniszczę go w procesie - Zobaczę, czy mogę edytować OP to poprawić):
- czy rzuciłeś opis na ciąg?
Chodzi o to, można użyć to:
$xml = simplexml_load_string($str);
foreach ($xml->channel->item as $item) {
var_dump($item->description);
}
Ale to ci tylko to:
object(SimpleXMLElement)[5]
object(SimpleXMLElement)[3]
co nie jest miłe ...
Musisz odrzucić dane do łańcucha, jak poniżej:
$xml = simplexml_load_string($str);
foreach ($xml->channel->item as $item) {
var_dump((string)$item->description);
}
i masz opisy:
string '
This is one of the content that I need printed on the screen, but nothing is happening. Please, please...output something... <br /><br /> <b>Showing</b>: 2 weeks<br /> <b>Starting On</b>: August 7, 2009 <br /> <b>Posted On</b>: August 7, 2009 <br />
<a href="http://www.mysite.com">click to view</a>
' (length=329)
string '
Another content...This is another of the content that I need printed on the screen, but nothing is happening. Please, please...output something... <br /><br /> <b>Showing</b>: 2 weeks<br /> Starting On: August 7, 2009 <br /> <b>Posted On</b>: August 7, 2009
;
' (length=303)
(Korzystanie trim
na te mogą okazać się przydatne, btw, jeśli XML jest wcięte)
Else ... No prawdopodobnie będziemy potrzebować twojego kodu php (przynajmniej byłby przydatny by wiedzieć, jak docierasz do znacznika description
;-))
EDIT
Dzięki za sformatowane XML!
Jeśli pójdę do Pastebin w textarea w dolnej części strony znajduje się biała przestrzeń na początku pliku XML, przed <?xml version="1.0" encoding="utf-8"?>
Jeśli masz, że jeden na swoich prawdziwych danych XML, będzie to źródłem problemu: nie jest poprawne XM1 (deklaracja XML musi być pierwsza rzecz: w danych XML).
Dostaniesz błędy takie jak ten:
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : XML declaration allowed only at the start of the document
można sprawdzić, czy?
A jeśli problem jest tutaj, należy aktywować error_reporting
i display_errors
;-) To mogłoby pomóc!
EDIT po przyjrzeniu pliku PHP:
w twojej pętli, robisz to, aby uzyskać opis dane:
$item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
opis nie zawiera żadnych childNode , Powiedziałbym ; A co z bezpośrednim użyciem parametru nodeValue?
Jak to:
$item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->nodeValue;
Wydaje się działać lepiej w ten sposób :-)
Jako marginesie, prawdopodobnie można zrobić to samo dla innych znaczników, jak sądzę; na przykład to też działa:
$item_title=$x->item($i)->getElementsByTagName('title')->item(0)->nodeValue;
$item_link=$x->item($i)->getElementsByTagName('link')->item(0)->nodeValue;
Co to daje?
Kolejny edit: i tutaj jest kod I prawdopodobnie używać:
$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($str); // I changed that because I have the XML data in a string
//get elements from "<channel>"
$channel = $xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')->item(0)->nodeValue;
//output elements from "<channel>"
echo "<p><a href='" . $channel_link . "'>" . $channel_title . "</a>";
echo "<br />";
echo $channel_desc . "</p>";
//get and output "<item>" elements
$x = $xmlDoc->getElementsByTagName('item');
for ($i=0 ; $i<=1 ; $i++) {
$item_title = $x->item($i)->getElementsByTagName('title')->item(0)->nodeValue;
$item_link = $x->item($i)->getElementsByTagName('link')->item(0)->nodeValue;
$item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->nodeValue;
echo ("<p><a href='" . $item_link
. "'>" . $item_title . "</a>");
echo ("<br />");
echo ($item_desc . "</p>");
echo' <p />';
}
Uwaga Mam dane XML w ciągu znaków, a nie muszę sprowadzić go z adresu URL, więc używam metody loadXML
, a nie load
.
Główną różnicą jest to, że usunąłem niektóre dostępy do ChildNodes, które moim zdaniem nie były konieczne.
Czy wydaje ci się to w porządku?
Czy można również opublikować część kodu, która jest odpowiedzialna za parsowanie danych XML? Może błąd jest w kodzie, a nie w danych ^^ –
Czy nadal masz kod XML i PHP? Pastebin usunął twoje wpisy. Jeśli je masz, możesz edytować pytanie, aby je przywrócić (nie umieszczaj ich ponownie w pastebin, zamiast tego wstawiaj je do tekstu pytania). Jeśli nie, pytanie zostanie usunięte. Dzięki. –
pasta nieznanego id! – GoodSp33d