2011-01-13 3 views
2

Я попытался создать XML-файл, используя приведенный ниже код.Создание XML в simplexml (php)

$xml = new SimpleXMLElement('<xml />'); 
while($rs = db_fetch_object($d_res)){ 
$cmp = $xml->addChild('Company'); 
$cmp->addChild('ID', $rs->nid); 
$cmp->addChild('Name', trim($rs->title)); 
$cmp->addChild('Created', $rs->created); 
$cmp->addChild('Updated', $rs->changed); 
} 
header("Content-type: text/xml;charset=utf-8;"); 
print($xml->asXML()); 

Но когда я пытаюсь проверить это я получаю ниже предупреждения

  1. Нет DOCTYPE не найдено! Проверка только синтаксиса XML.
  2. Кодировка символов не указана на уровне документа.

Как их очистить? XML - это here, а используемый валидатор - validator.w3.org.

ответ

3

Хотя это предупреждения, которые вы могли бы игнорировать, это действительно хорошая идея, чтобы попытаться их исправить.

Первое сообщение указывает, что XML-файл не указывает DTD; второй относится к тому факту, что директива xml не содержит никакого атрибута кодирования.

К сожалению, если вы посмотрите на API-интерфейс simplexml, это не похоже, что можно добавить (хотя я мог бы что-то упустить, не знакомый с ним). Я думаю, что это «просто», он идеально подходит для быстрого чтения XML-файла, но не так много для создания xml. Вы, вероятно, должны повернуться к чему-то слегка «тяжелее», как XML_Serializer.

+0

Я бы предложил использовать обычный пакет, например DOM или XMLWriter. – Gordon

1
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" ?>'); 
+0

$ xml = new SimpleXMLElement (''); –

+0

:: это объявление ... (Шакти Сингх пропустил вопросительные знаки) ||| затем :: это тег корневого документа (хотя необычно, чтобы корневой тег назывался xml, но разрешен. –

2

Вы можете решить игнорировать эти предупреждения. В XML не требуется ни DOCTYPE, ни объявленная кодировка символов. На самом деле, большинство документов XML не содержат DOCTYPE.

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

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

Предупреждение кодировки символов фиксируется включая декларацию XML в верхней части документа, который обозначает кодировку:

<?xml version="1.0" encoding="utf-8" ?> 

Если вы не включать его, XML по умолчанию для «версии 1.0» и «UTF -8" . Если это то, что вы доставляете, все хорошо. Если вы доставляете что-то еще, необходимо включить эту информацию.

1

Вы можете просто создать корневой XML элемент следующий путь:

$rootXml = new SimpleXMLElement("<!DOCTYPE your_root_xml_element SYSTEM 'URL_TO_DTD_SCHEME'><your_root_xml_element></your_root_xml_element>"); 
.... 
echo $rootXml->asXML(); 

Таким образом, вы получите следующий действительный XML:

<?xml version="1.0"?> 
<!DOCTYPE your_root_xml_element SYSTEM "URL_TO_DTD_SCHEME"> 
<your_root_xml_element> 
</your_root_xml_element> 
0
`$xmlstr = '<?xml version="1.0" encoding="utf-8"?> 
<root> 
<Data> 
    <Id>0475109067</Id> 
    <Contact> 
     <Name>Daya</Name> 
     <FirstName>Star</FirstName> 
     <Email>[email protected]</Email> 
    </Contact> 
</Data> 
<Result> 
    <Name></Name> 
</Result> 
</root>'; 

$xml = new SimpleXMLElement($xmlstr); 
$xml->Result->Name = 'Xmltestfile'; 
$xml->asXML('test.xml'); 
$xml->asXML();` 

Этот код будет создавать XML файл с именем test

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