2009-10-18 38 views
17

Có ai biết cách nhanh chóng để chuyển đổi một SimpleXMLElement thành một đối tượng STDClass bình thường, mà không cần phải lặp qua từng nhánh một cách thủ công không? Tôi sẽ cảm thấy tốt hơn khi làm việc với một đối tượng bình thường sau khi tìm nạp dữ liệu.Nhanh chóng chuyển đổi simpleXMLObject sang STDClass?

+0

Bạn có nghĩa là nhập khẩu tất cả các tài sản công cộng của SimpleXMLElement đó? Nhanh chóng là tương đối :) – Flavius

+0

Bạn sẽ "cảm thấy tốt hơn" không phải là một lý do hợp lệ imo :) Lý do thực sự cho bạn muốn một stdClass để làm việc với là gì? – chelmertz

+3

Vâng, tôi đang tìm nạp dữ liệu từ một tệp XML và xử lý nó sau đó trong một hệ thống khá phức tạp. Từ thời điểm đó, tôi không cần bất kỳ hành vi cụ thể nào của XML/SimpleXML, mà chỉ là dữ liệu thô. Các chức năng XML của PHP có khuynh hướng không được ghi chép đầy đủ như các phần khác của ngôn ngữ, và tôi lo sợ hành vi bất ngờ khi thao tác dữ liệu trên đường đi với nó vẫn là một phần tử đơn giản. Với một STDClass, tôi biết những gì mong đợi, làm thế nào để thao tác nó, xác nhận dữ liệu và vân vân. Đó là phiên bản dài của "cảm thấy tốt hơn". Cảm thấy tốt hơn? :) –

Trả lời

4

Tôi đề nghị xem xét vào sử dụng XMLReader, mà cho vay cũng chính nó để giải nén dữ liệu và lưu trữ nó như bất cứ loại dữ liệu một mong muốn, thay vì SimpleXML. Nó đặc biệt tốt cho các tài liệu được sử dụng thường xuyên (tôi sử dụng nó, mở rộng là RSSReader, cho RSS), nhanh hơn nhiều so với dự kiến, và tiền thưởng sử dụng ít bộ nhớ hơn SimpleXML.

+0

Cảm ơn GZipp, tôi sẽ xem xét điều đó. –

1

Tôi không biết nếu có cách nào để chuyển đổi đối tượng mà không cần phải lặp qua đối tượng đó. Tôi đoán là bạn không thể.

Bạn có thể kiểm tra điều này thread, nó cho bạn thấy làm thế nào để chuyển đổi một SimpleXML thành một mảng, bạn có thể điều chỉnh nó.

+0

Lý do cho downvote? –

63
$my_std_class = json_decode(json_encode($my_simplexmlelement)); 
$my_assoc_array = json_decode(json_encode($my_simplexmlelement), true); 
+0

Điều này hoạt động giống như một say mê !!! – Eric

+1

+1, siêu giải pháp, hoạt động tuyệt vời. – Cyclonecode

+2

+1, Điều này chắc chắn sẽ là câu trả lời được chọn. Lý do tôi cần chuyển đổi nó thành stdClass là vì Drupal có vấn đề với đối tượng SimpleXmlElement. –

2

Một cách khác là:

(object)(array)$my_simplexmlelement 

Thật không may nếu bạn có con họ vẫn như SimpleXMLElement

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