Tôi đang viết nguồn cấp dữ liệu RSS của sản phẩm Google bằng SimpleXML trong PHP. Tôi đã có các sản phẩm của tôi đến từ cơ sở dữ liệu và tạo ra các tập tin RSS tốt, nhưng có vấn đề khi nói đến không gian tên.Cách sử dụng không gian tên khi viết tệp XML bằng SimpleXML
Tôi đã tìm kiếm và tìm kiếm Stack Overflow và xem qua hàng tá bài đăng về cách phân tích cú pháp nguồn cấp dữ liệu XML, nhưng vấn đề của tôi thực sự là authoring một tệp XML có không gian tên.
Dưới đây là những gì các tập tin nên trông giống như:
<?xml version="1.0" encoding="UTF-8" ?>
<rss version ="2.0" xmlns:g="http://base.google.com/ns/1.0">
<!-- content -->
</rss>
Và đây là mã của tôi:
<?php
$xml = new SimpleXMLElement('<rss></rss>');
$xml->addAttribute('version', '2.0');
$xml->addChild('channel');
$xml->channel->addChild('title', 'Removed');
$xml->channel->addChild('description', 'Removed');
$xml->channel->addChild('link', 'Removed');
foreach ($products as $product) {
$item = $xml->channel->addChild('item');
$item->addChild('title', htmlspecialchars($product['title']));
$item->addChild('description', htmlspecialchars($product['title']));
$item->addChild('link', $product['url']);
$item->addChild('id', $product['product_id']);
$item->addChild('price', $product['price_latest']);
$item->addChild('brand', $product['range']);
$item->addChild('condition', 'new');
$item->addChild('image_link', $product['image']);
}
Làm thế nào để giới thiệu không gian tên g
, cả hai tuyên bố xmlns
trong thư mục gốc rss
phần tử và sau đó làm tiền tố cho id
, price
, brand
, condition
và image_link
trong mỗi thành phần item
?
tôi khuyên bạn nên sử dụng [DOM] (http://php.net/manual/en/book .dom.php) để thay thế. SimpleXML chỉ là - * đơn giản *. Những gì bạn đang làm bây giờ đã rời khỏi cõi đơn giản. Bạn cần một API đầy đủ tính năng cho việc này. – DaveRandom
Bạn đã có một ví dụ về cách tôi sẽ thêm một không gian tên với DOM? –
@MartinBean Có một ví dụ trong [manual cho createElementNS của DOMDocument] (http://php.net/manual/domdocument.createelementns.php). – Furgas