Hi, I'm using PHP to parse an xml file but for some reason it is truncating the xml file and only taking the last characters.
<?php
class xItem {
var $xTitle;
var $xUsername;
var $xCountry;
var $xDate;
var $xContent;
}
// general vars
$sTitle = "";
$sUsername = "";
$sCountry = "";
$sDate = "";
$sContent = "";
$arItems = array();
$itemCount = 0;
// ********* Start User-Defined Vars ************
// rss url goes here
$uFile = "http://www.codymcculloch.com/clients/Necro/news.xml";
// ********* End User-Defined Vars **************
function startElement($parser, $name, $attrs) {
global $curTag;
$curTag .= "^$name";
}
function endElement($parser, $name) {
global $curTag;
$caret_pos = strrpos($curTag,'^');
$curTag = substr($curTag,0,$caret_pos);
}
function characterData($parser, $data) { global $curTag; // get the Channel information first
global $sTitle, $sLink, $sDescription;
$titleKey = "^NEWSBOX^NEWS^TITLE";
$contentKey = "^NEWSBOX^NEWS^CONTENT";
$usernameKey = "^NEWSBOX^NEWS^USERNAME";
$countryKey = "^NEWSBOX^NEWS^COUNTRY";
$dateKey = "^NEWSBOX^NEWS^DATE";
if ($curTag == $titleKey) {
$sTitle = $data;
}
elseif ($curTag == $usernameKey) {
$sUsername = $data;
}
elseif ($curTag == $contentKey) {
$sContent = $data;
}
elseif ($curTag == $countryKey) {
$sCountry = $data;
}
elseif ($curTag == $dateKey) {
$sDate = $data;
}
// now get the items
global $arItems, $itemCount;
$itemTitleKey = "^NEWSBOX^NEWS^TITLE";
$itemContentKey = "^NEWSBOX^NEWS^CONTENT";
$itemUsernameKey = "^NEWSBOX^NEWS^USERNAME";
$itemCountryKey = "^NEWSBOX^NEWS^COUNTRY";
$itemDateKey = "^NEWSBOX^NEWS^DATE";
if ($curTag == $itemTitleKey) {
// make new xItem
$arItems[$itemCount] = new xItem();
// set new item object's properties
$arItems[$itemCount]->xTitle = $data;
}
elseif ($curTag == $itemContentKey) {
$arItems[$itemCount]->xContent = $data;
}
elseif ($curTag == $itemUsernameKey) {
$arItems[$itemCount]->xUsername = $data;
}
elseif ($curTag == $itemCountryKey) {
$arItems[$itemCount]->xCountry = $data;
}
elseif ($curTag == $itemDateKey) {
$arItems[$itemCount]->xDate = $data;
// increment item counter
$itemCount++;
}
}
// main loop
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($uFile,"r"))) {
die ("could not open RSS for input");
}
while ($data = fread($fp, 1048576)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
// write out the items
?>
<div class="mainHeader">
<img src="img/header_box.gif" />
<div class="firstword">RECENT</div>
<div class="secondword">NEWS</div>
</div>
<?php
for ($i=0; $i<count($arItems); $i++) {
$txItem = $arItems[$i];
?>
<div class="newsCont">
<div class="title"><?php echo($txItem->xTitle); ?></div>
<div class="posted"><?php if(isset($txItem->xUsername)) { ?>Posted by: <img src="img/flags/1.gif" alt="" class="posted_img" /> <?php } echo($txItem->xUsername."</div><div class=\"date\">".$txItem->xDate); ?></div><br />
<div class="content"><?php echo nl2br($txItem->xContent); ?></div>
</div><div class="seperator"> </div>
<?php } ?>
XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE newsbox [
<!ELEMENT newsbox (news)+>
<!ELEMENT news (title,content,username,country,date)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT content ANY>
<!ELEMENT username (#PCDATA)>
<!ELEMENT country (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ATTLIST news
id CDATA #REQUIRED >
]>
<newsbox>
<news id="12">
<title>NECRO - PRODUCER OF THE YEAR</title>
<content>Cras varius dui. Phasellus erat metus, aliquet ac, facilisis at, tempus sed, libero. Nam sed risus. Quisque risus dolor, ullamcorper a, lacinia vel, tincidunt vel, pede. Suspendisse eget erat quis ante aliquet ultricies. Donec non felis nec augue venenatis feugiat. Mauris purus. Nullam vel nisl tempor velit commodo porta. Integer blandit lectus eu purus. Nunc porta. In eu nunc. Duis viverra. Sed tellus urna, ultrices ac, congue et, dignissim ac, turpis. Vestibulum in magna ac tellus sollicitudin volutpat. Proin eros odio, porttitor eget, condimentum nec, consectetuer sed, orci. Vivamus vitae metus. Vivamus commodo facilisis enim.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque vitae wisi. Suspendisse euismod. Curabitur varius, nulla ut egestas elementum, mauris dolor vehicula ante, non venenatis neque risus eget ligula. Fusce in magna vitae elit ornare fringilla. Nullam ac odio. Morbi iaculis eros nec nulla. Donec sed wisi quis sem fringilla commodo. Phasellus lacinia. Donec erat felis, egestas ut, aliquam sit amet, ultricies et, mi. Nunc consequat massa at metus. Proin sem nibh, feugiat sit amet, convallis molestie, luctus at, leo.</content>
<username>Necro</username>
<country>1</country>
<date>[January 18, 2005]</date>
</news>
</newsbox>
I get the output of:
NECRO - PRODUCER OF THE YEAR
Posted by: Necro
[January 18, 2005]
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque vitae wisi. Suspendisse euismod. Curabitur varius, nulla ut egestas elementum, mauris dolor vehicula ante, non venenatis neque risus eget ligula. Fusce in magna vitae elit ornare fringilla. Nullam ac odio. Morbi iaculis eros nec nulla. Donec sed wisi quis sem fringilla commodo. Phasellus lacinia. Donec erat felis, egestas ut, aliquam sit amet, ultricies et, mi. Nunc consequat massa at metus. Proin sem nibh, feugiat sit amet, convallis molestie, luctus at, leo.
if I take out the linebreaks I get:
ut egestas elementum, mauris dolor vehicula ante, non venenatis neque risus eget ligula. Fusce in magna vitae elit ornare fringilla. Nullam ac odio. Morbi iaculis eros nec nulla. Donec sed wisi quis sem fringilla commodo. Phasellus lacinia. Donec erat felis, egestas ut, aliquam sit amet, ultricies et, mi. Nunc consequat massa at metus. Proin sem nibh, feugiat sit amet, convallis molestie, luctus at, leo.
Hopefully someone has some more experience with XML/PHP than me that will help out 😃. Thanks for any help in advance. btw, if u have a better way of parsing XML I'd love to hear it because this way obviously isn't working for me 😛
-Cody