2010-03-15 45 views
5

Có thể sử dụng XMLWriter của php để chèn nút mới vào tệp xml hiện có hay không và sau đó lưu tệp. Điều này sẽ được nhiều hơn nữa benficial với tôi mà thực sự tạo ra một tập tin enw mỗi khi tôi muốn cập nhật một tập tin xml.PHP thêm nút vào tệp xml hiện có và lưu

Trả lời

2

Bạn có thể sử dụng số Simple XML của PHP. Bạn phải đọc nội dung tệp, thêm nút bằng Simple XML và viết lại nội dung.

7

Tôi sẽ sử dụng simplexml để thay thế. Tôi đang đi trên một chi và giả sử rằng nếu bạn có XML nhà văn bạn có simplexml là tốt.

Hãy xem, để thêm một nút, hãy giả sử một rất đơn giản xml file (có được nó?):

<desserts> 
    <cakes> 
     <cake>chocolate</cake> 
     <cake>birthday</cake> 
    </cakes> 
    <pies> 
     <pie>apple</pie> 
     <pie>lemon</pie> 
    </pies> 
</desserts> 

Nếu đây là trong một tập tin, và bạn muốn thêm một chiếc bánh mới, bạn sẽ do:

$desserts = new SimpleXMLElement; 

$desserts->loadfile("desserts.xml"); 

$desserts->pies->addChild("pie","pecan"); 

Nó có thể tinh vi hơn nhiều so với điều này, tất nhiên. Nhưng một khi bạn nhận được hang của nó, nó rất hữu ích.

0

Vấn đề chung ở đây là tài liệu XML đúng ngữ pháp phải chỉ có một phần tử gốc. Điều đó có nghĩa là bạn phải đọc/phân tích cú pháp trong cây tài liệu hoàn chỉnh để có thể thêm phần tử mới bên trong. Do đó tất cả các đề xuất simplexml ở đây.

XMLWriter có nghĩa là để viết một luồng dữ liệu XML rất hiệu quả, nhưng không thể sửa đổi các tệp hiện có (mà không đọc chúng trước).

Xem chủ đề này trên perlmonks.com nơi tệp nhật ký XML được thảo luận. Đặc biệt thú vị là nhận xét của "mirod" cho thấy cách có một tệp XML được định dạng tốt và vẫn có thể thêm các nút vào một tài liệu. Giải pháp là đặt các nút tùy ý vào một tệp riêng biệt (không được định dạng tốt bởi vì phần tử gốc gây rối) và tham chiếu tệp như một thực thể bên ngoài. Trong trường hợp của bạn, bạn sẽ viết tệp sẽ được bao gồm dưới dạng thực thể với hàm fopen PHP tiêu chuẩn, hàm fwrite fclose trong khi mở tệp để chắp thêm.

+0

Hầu hết các trình phân tích cú pháp XML đều hiểu/xử lý các tệp tham chiếu đủ tốt để dựa vào giải pháp này không? Và ý tưởng về các nút được liên kết này có được xác nhận là một ý tưởng khá an toàn và được hiểu không? Tôi có thể thấy nó sẽ như thế nào, nếu trình duyệt/máy khách/trình phân tích cú pháp chỉ đi xuống từ tham chiếu, nhưng có một số cơ hội để bảo vệ chống lại các tham chiếu không đúng định dạng mà nó cần phải xác nhận toàn bộ tài liệu trước không? hoặc nó chỉ cần có giá trị trong bối cảnh của tài liệu xml chính? – Anthony

+0

Tôi không biết nhiều trình phân tích cú pháp XML để biết liệu các trình phân tích cú pháp "hầu hết" có hỗ trợ mở rộng đối tượng hay không. Tôi chủ yếu làm việc với PHP và trình phân tích cú pháp XML của PHP (một trình bao bọc xung quanh xmllib) hỗ trợ nó. Sau khi đưa vào, tài liệu đầy đủ phải được tạo đúng. Tôi sẽ chỉnh sửa câu trả lời của mình để phản ánh điều đó. – chiborg

-1
$xml_doc = new DomDocument; 

$xml_doc->Load('yourfilename.xml'); 

$desserts = $xml_doc->getElementsByTagName('desserts')->item(0); 

$burger =$xml_doc->createElement('burger'); 

$desserts->appendChild($burger); 

$done = $xml_doc->save("yourfilename.xml"); 

Công việc này hoàn toàn tốt. Và bạn cũng có thể thêm thuộc tính vào bánh mì kẹp thịt quá

Các vấn đề liên quan