为了账号安全,请及时绑定邮箱和手机立即绑定

PHP:当我在 xml 中转换时出现问题

PHP:当我在 xml 中转换时出现问题

PHP
浮云间 2022-01-08 17:23:24
我希望我的 arElemt(gurl 和 gname) 放入 . 示例和问题 2 = 当我写 g:url 或 g:name = Error... php7.2* 现在示例现在我有了这个结构-RSS- -标题- -关联- -描述---古尔---gname我想现在我有这个结构-RSS- -标题- -关联- -描述---古尔---gname---古尔---gname---古尔---我想要的gname-RSS- -标题- -关联- -描述- -物品-----古尔-----gname- -物品-----古尔-----gname- -物品-----古尔-----gname- -物品-----古尔-----gname header("Content-type: text/xml; charset=utf-8");    $dom = new DOMDocument('1.0','utf-8');    $root = $dom->createElement('rss');    $dom->appendChild($root);    $title = $dom->createElement('title', 'test');    $root->appendChild($title );    $link = $dom->createElement('link', 'test');    $root->appendChild($link );    $description = $dom->createElement('description', 'test');    $root->appendChild($description );$root = $item->createElement('item');while($arElement = $rsElements->GetNext()){    $url = $dom->createElement("gurl", $surl.$arElement[DETAIL_PAGE_URL]);    $item->appendChild($url );    $name = $dom->createElement("gname", $arElement[NAME]);    $root->appendChild($name );}   echo $dom->saveXML();    $dom->save($file_name); // save as file
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

这是gurl和之间的一个很大区别g:urlgurl不是有效的 RSS 标签 afaikg:url是已url定义命名空间内的元素。

gg: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允许读取/写入节点的文本内容并正确转义。


查看完整回答
反对 回复 2022-01-08
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信