2011-01-20 43 views
13

Tôi đã một test.xml tập tin XMLĐang cập nhật với PHP

<?xml version="1.0"?> 
<info> 
    <user> 
    <name> 
     <firstname>FirstName</firstname> 
     <lastname>Last Name</lastname> 
     <nameCoordinate> 
     <xName>125</xName> 
     <yName>20</yName> 
     </nameCoordinate> 
    </name> 
    </user> 
</info> 

Tôi đang cố gắng để cập nhật các xName nút & yName sử dụng PHP trên trình đơn. Vì vậy, tôi đã tải tệp bằng simplexml_load_file(). Mã hành động của biểu mẫu PHP ở bên dưới

<?php 
    $xPostName = $_POST['xName']; 
    $yPostName = $_POST['yName']; 

    //load xml file to edit 
     $xml = simplexml_load_file('test.xml'); 

    $xml->info->user->name->nameCoordinate->xName = $xPostName; 
    $xml->info->user->name->nameCoordinate->yName = $yPostName; 
    echo "done"; 
?> 

Tôi muốn cập nhật giá trị nút nhưng mã trên có vẻ không chính xác. Bất cứ ai có thể giúp tôi khắc phục nó ??

CẬP NHẬT: Câu hỏi của tôi có phần tương tự như điều này Updating a XML file using PHP nhưng ở đây, tôi đang tải XML từ tệp bên ngoài và tôi cũng đang cập nhật phần tử chứ không phải thuộc tính. Đó là nơi sự nhầm lẫn của tôi nằm.

+0

những gì không làm việc như mong đợi? bạn không có lỗi giải thích. –

+0

Tôi muốn cập nhật các giá trị nút. Nó không xảy ra. – ptamzz

+0

Tôi đã cập nhật câu hỏi của mình ở trên. – ptamzz

Trả lời

28

Bạn hiện không truy cập nút phải. Trong ví dụ của bạn, $xml giữ nút gốc <info/>. Dưới đây là một mẹo tuyệt vời: luôn đặt tên biến chứa tài liệu XML của bạn sau nút gốc, nó sẽ ngăn chặn sự nhầm lẫn đó.

Ngoài ra, như Phường Muylaert đã chỉ ra, bạn cần phải lưu tệp.

Dưới đây là ví dụ điều chỉnh:

// load the document 
// the root node is <info/> so we load it into $info 
$info = simplexml_load_file('test.xml'); 

// update 
$info->user->name->nameCoordinate->xName = $xPostName; 
$info->user->name->nameCoordinate->yName = $yPostName; 

// save the updated document 
$info->asXML('test.xml'); 
+0

Cảm ơn bạn Josh :). Nó hoạt động ngay bây giờ – ptamzz

+0

Điều gì sẽ xảy ra nếu nút xName hoặc yName chưa tồn tại? – swl1020

+0

Điều gì sẽ xảy ra nếu bạn có nhiều người dùng có nhiều tên người dùng và muốn chỉnh sửa tất cả chúng cùng một lúc? Có suy nghĩ gì không? – user906379

3

Bạn phải ghi lại các thay đổi về tệp, sử dụng phương thức asXML của SimpleXMLElement.

+0

Tôi tin rằng viết lại toàn bộ các thẻ. Tôi chỉ muốn cập nhật các nút cụ thể. – ptamzz

+1

Nó có, nhưng viết ngắn một nửa logic giải thích XML trong mã của riêng bạn để chỉ viết các nút cụ thể, tôi tin rằng đó là như xa như bạn sẽ nhận được với SimpleXML. –

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