2009-04-28 29 views
81

Tôi đang thử thêm một số dữ liệu vào một tệp XML hiện có bằng cách sử dụng SimpleXML của PHP. Vấn đề là nó thêm tất cả dữ liệu vào một dòng:PHP simpleXML làm thế nào để lưu tệp theo cách được định dạng?

<name>blah</name><class>blah</class><area>blah</area> ... 

Và cứ tiếp tục như vậy. Tất cả trong một dòng. Làm cách nào để giới thiệu ngắt dòng?

Làm thế nào để làm cho nó như thế này?

<name>blah</name> 
<class>blah</class> 
<area>blah</area> 

Tôi đang sử dụng chức năng asXML().

Cảm ơn.

+0

Ngoài ra còn có gói PEAR [XML_Beautifier] (http://pear.php.net/package/XML_Beautifier). – karim79

Trả lời

133

Bạn có thể sử dụng DOMDocument class định dạng lại mã của bạn:

$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($simpleXml->asXML()); 
echo $dom->saveXML(); 
+0

Cảm ơn. Hoạt động tuyệt vời. – Alagu

+0

Cảm ơn bạn. Đơn giản và hiệu quả. –

+2

Vì vậy, nó không thể với SimpleXML? –

17

Sử dụng dom_import_simplexml chuyển đổi sang một DOMElement. Sau đó, sử dụng khả năng của nó để định dạng đầu ra.

$dom = dom_import_simplexml($simple_xml)->ownerDocument; 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
echo $dom->saveXML(); 
+0

không hoạt động. Hàm trả về một DOMElement, không phải là DOMDocument – karka91

+0

Có vẻ 'documentElement' phải là' ownerDocument'. Không chắc chắn nếu api thay đổi hoặc điều này chỉ là một lỗi đánh máy. Tôi đã sửa nó ngay bây giờ. – troelskn

+2

xin lưu ý rằng điều này vẫn không hoạt động như bảo vệWhiteSpace và formatOutput nên được thiết lập _before_ nhập tài liệu để có bất kỳ tác dụng :) – karka91

27

Giải pháp của Gumbo thực hiện thủ thuật. Bạn có thể làm việc với simpleXml ở trên và sau đó thêm vào cuối để echo và/hoặc lưu nó với định dạng.

Mã dưới đây echos nó và lưu nó vào một tập tin (xem chú thích trong mã và loại bỏ bất cứ điều gì bạn không muốn):

//Format XML to save indented tree rather than one line 
$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($simpleXml->asXML()); 
//Echo XML - remove this and following line if echo not desired 
echo $dom->saveXML(); 
//Save XML to file - remove this and following line if save not desired 
$dom->save('fileName.xml'); 
+0

vẫn hoạt động như một sự quyến rũ !! – Risinek

2

Như GumboWitman trả lời; tải và lưu tài liệu XML từ một tệp hiện có (chúng tôi có nhiều người mới ở đây) với DOMDocument::loadDOMDocument::save.

<?php 
$xmlFile = 'filename.xml'; 
if(!file_exists($xmlFile)) die('Missing file: ' . $xmlFile); 
else 
{ 
    $dom = new DOMDocument('1.0'); 
    $dom->preserveWhiteSpace = false; 
    $dom->formatOutput = true; 
    $dl = @$dom->load($xmlFile); // remove error control operator (@) to print any error message generated while loading. 
    if (!$dl) die('Error while parsing the document: ' . $xmlFile); 
    echo $dom->save($xmlFile); 
} 
?> 
Các vấn đề liên quan