2011-01-13 79 views
2

我嘗試使用下面的代碼創建一個XML文件。simplexml中的XML創建(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指令不包含任何編碼屬性的事實。

不幸的是,從查看simplexml API看來,它看起來不像添加任何一個(儘管我可能會錯過某些東西,而不熟悉它)。我猜是「簡單」,它是完美的快速讀取XML文件,但沒有太多產生XML。你將probaby不得不轉向像XML_Serializer這樣稍微「更重」的東西。

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

$ xml = new SimpleXMLElement('<?xml version =「1.0」encoding =「utf-8」?>'); – 2011-01-13 08:20:05

+0

<?xml version =「1.0」encoding =「utf-8」?> ::這是聲明...(Shakti Singh錯過了問號)|||那麼 ::這是文檔根標籤(雖然根標籤被命名爲xml但允許使用它是不常見的。 – 2011-01-13 08:21:27

2

您可以決定忽略這些警告。 XML中不需要DOCTYPE或聲明的字符編碼。實際上,大多數XML文檔不包含DOCTYPE。

一個DOCTYPE用於文檔驗證,這意味着一個正式的說明存在哪些元素和屬性可以存在爲您的文檔和可以進行檢查,你的文檔不包含任何東西(在這種情況下,它會成爲無效)。除非您非常關心,並且準備開發,託管和維護您自己的DOCTYPE規範,否則請忽略此警告。

大多數XML關心良構,這意味着該文件堅持XML需要怎麼樣子(無交叉嵌套標籤的規則的時候,創作者和消費者的,所有標籤都必須關閉,正確轉義的內容)。否則,你的文件將會破裂 - 但這不是這種情況。

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

如果不包含它,XML默認爲「1.0版本」和「UTF:

字符編碼警告被包括在文檔頂部的XML聲明,表示編碼固定-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