1 回答
TA贡献1811条经验 获得超4个赞
这是gurl
和之间的一个很大区别g:url
。gurl
不是有效的 RSS 标签 afaik。g:url
是已url
定义命名空间内的元素。
在g
从g:url
一个命名空间前缀。它引用了命名空间定义。xmlns:g
在示例中查找属性或在格式文档中查找名称空间 URI。的g
是该属性的值的别名。解析器在内部将其解析为 URI。以下所有节点都可以读作{urn:example:namespace}url
.
<g:url xmlns:g="urn:example:namespace"/>
<g2:url xmlns:g2="urn:example:namespace"/>
<url xmlns="urn:example:namespace"/>
RSS 本身只是格式良好的 XML,它不使用命名空间。但它可以包含使用名称空间的其他 XML 格式(MediaRSS,...)。
要创建具有命名空间的元素,请使用方法DOMDocument::createElementNS()
。如果需要,这将自动添加命名空间定义。但是,如果不使用文档元素的命名空间,它将被添加多次。您可以将命名空间定义设置为保留的 XMLNS 命名空间的属性。
$data = ['one', 'two'];
// the namespace for namespace definitions
const XMLNS_XMLNS = 'http://www.w3.org/2000/xmlns/';
// namespace referenced by prefix g?
const XMLNS_G = 'urn:example:namespace';
$document = new DOMDocument('1.0','utf-8');
$rss = $document->appendChild(
$document->createElement('rss')
);
// add the namespace definition to the document element
$rss->setAttributeNS(XMLNS_XMLNS, 'xmlns:g', XMLNS_G);
// create + append element node, set its text content
$rss->appendChild(
$document->createElement('title')
)->textContent = 'test';
foreach ($data as $value) {
$item = $rss->appendChild(
$document->createElement('item')
);
// create and append an element with the namespace
$item->appendChild(
$document->createElementNS(XMLNS_G, 'g:url')
)->textContent = 'http://example.com/page?'.$value;
}
$document->formatOutput = TRUE;
echo $document->saveXML();
输出:
<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:g="urn:example:namespace">
<title>test</title>
<item>
<g:url>http://example.com/page?one</g:url>
</item>
<item>
<g:url>http://example.com/page?two</g:url>
</item>
</rss>
提示 1:DOMNode::appendChild()返回附加的节点。可以嵌套创建调用。
提示 2:DOMNode::$textContent允许读取/写入节点的文本内容并正确转义。
- 1 回答
- 0 关注
- 130 浏览
添加回答
举报