2010-07-16 2 views
1

Хорошо. Вот код.Проблема в XML-контенте ..?

XML Parsing Error: not well-formed 
<item_to_page_title><![CDATA[Breaking news, real-time scores and daily analysis from Sports Illustrated SI.com]]></item_to_page_title> 

Элемент отслеживания ошибок указывает на символ [] как символ. Я установил страницу в UTF-8 и все еще не работает.

Нет, я не могу просто взять автомобиль, похожий на []. Это API, над которым я работаю, поэтому я не могу редактировать контент. Только доставьте его. Есть ли обходной путь? Теги CDATA не делают вещь здесь ..

-EDIT-

Это единственная строка ошибки вывода. Вот источник PHP:

 $output .= "<activity>\n"; 
     $result = mysql_query($query, $con); 
     while($row = mysql_fetch_array($result)){ 
      $result2 = mysql_query("SELECT * FROM sites WHERE id = '".$row['u_to']."'", $con); 
      $row2 = mysql_fetch_array($result2); 

      $output .= "<item> \n"; 
      $output .= "<item_type>" . $row['u_type'] . "</item_type> \n"; 
      $output .= "<item_to_page_id>" . $row['u_to'] . "</item_to_page_id> \n"; 
      $output .= "<item_to_page_url><![CDATA[".$row2['s_url']."]]></item_to_page_url> \n"; 
      $output .= "<item_to_page_title><![CDATA[".$row2['s_title']."]]></item_to_page_title> \n"; 
      $output .= "<item_date>" . $row['u_date'] . "</item_date> \n"; 
      $output .= "</item> \n"; 
     } 
     $output .= "</activity>\n"; 

Запросы MySQL и такая работа отлично. Если я ограничу запрос MySQL (не включен в этот фрагмент), так что он не выводит столько результатов (что означает, что результат с символом, вызывающим ошибку, не возвращается), он отлично работает. Но мне нужно, чтобы это было пуленепробиваемым, поэтому мне нужно найти обходной путь для этого персонажа ... или что-то другое, вызывающее проблему.

+0

Нет ничего другого в этой линии? Может быть, ошибка сообщается в неправильной строке и представляет собой пару строк раньше после этого? –

+0

Определенно ничего плохого в этом фрагменте XML, который вы опубликовали. Это все или просто штука? Можете помочь опубликовать весь фрагмент XML, если у вас его есть. –

+0

я редактировал, чтобы дать вам источник, но эта строка - единственная строка, которую мне дает ошибка. –

ответ

1

Попробуйте его с DOM, просто чтобы увидеть, если это делает разницу:

$dom = new DOMDocument; 
$dom->formatOutput = TRUE; 
$dom->preserveWhiteSpace = FALSE; 
$dom->loadXML('<activity/>'); 

$result = mysql_query($query, $con); 
while($row = mysql_fetch_array($result)){ 

    $result2 = mysql_query("SELECT * FROM sites WHERE id = '".$row['u_to']."'", $con); 
    $row2 = mysql_fetch_array($result2); 

    $item = $dom->createElement('item'); 

    $item->appendChild(
     $dom->createElement('item_type', $row['u_type'])); 

    $item->appendChild(
     $dom->createElement('item_to_page_id', $row['u_to'])); 

    $cData = $dom->createCDATASection($row2['s_url']); 
    $node = $dom->createElement('item_to_page_url'); 
    $node->appendChild($cData); 
    $item->appendChild($node); 

    $cData = $dom->createCDATASection($row2['s_title']); 
    $node = $dom->createElement('item_to_page_title'); 
    $node->appendChild($cData); 
    $item->appendChild($node); 

    $item->appendChild(
     $dom->createElement('item_date', $row['u_date'])); 

    $dom->documentElement->appendChild($item); 
} 
echo $dom->saveXML(); 

На заметка на поля: DOM будет обрабатывать большинство символов, которые вы используете в качестве textnodes сам по себе. Он также автоматически конвертирует объекты, такие как &, в &amp;. Так что вам могут не понадобиться разделы CDATA.

Смежные вопросы