2010-01-20 34 views
5

Tên tối.Các vấn đề về không gian tên PHP simplexml

Trước hết, tôi đã đọc How do I parse XML containing custom namespaces using SimpleXML?.

Tôi đang phân tích cú pháp tài liệu XML từ nguồn không phải là tâm trí và họ sử dụng không gian tên tùy chỉnh.

<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0" xmlns:moshtix="http://www.moshtix.com.au"> 
    <channel> 
    <item> 
    <link>qweqwe</link> 
    <moshtix:genre>asdasd</moshtix:genre> 
... 

Ví dụ: Khi tôi phân tích cú pháp bằng SimpleXML, không có phần tử nào trong số các phần tử không gian tên Mostix được hiển thị hoặc có thể truy cập được. Có lẽ là một giải pháp thực sự đơn giản, nhưng bất kỳ ý tưởng guys?

Trả lời

6

Thông thường, mọi người sử dụng children().

$rss = simplexml_load_string(
    '<?xml version="1.0" encoding="utf-8"?> 
    <rss version="2.0" xmlns:moshtix="http://www.moshtix.com.au"> 
     <channel> 
      <link>qweqwe</link> 
      <moshtix:genre>asdasd</moshtix:genre> 
     </channel> 
    </rss>' 
); 

foreach ($rss->channel as $channel) 
{ 
    echo 'link: ', $channel->link, "\n"; 
    echo 'genre: ', $channel->children('moshtix', true)->genre, "\n"; 
} 
+0

Trong khi đó hoạt động để trích xuất từng phần tử, rất hữu ích, khá nhiều thời gian tôi cần thực hiện json_encode và chỉ cần gộp từng mục hợp lệ và lưu chúng trong cơ sở dữ liệu. Nhưng khi tôi làm điều này, nó không nhận ra các mục không gian tên tùy chỉnh. Ý tưởng nào? Dữ liệu bên trong mỗi thay đổi quá nhiều để đưa mọi dữ liệu vào một cách thủ công. – James

+0

Được quản lý để khắc phục nó bằng một vài lần quét qua tất cả các phần tử;) – James

+1

Nó luôn luôn che khuất tôi khi mọi người nói rằng họ đang chuyển đổi XML thành JSON mà không muốn quan tâm đến cấu trúc. Tại sao không lưu trữ nó như là, tốt, XML? – IMSoP

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