使用 DOMDocument 生成站点地图:输出中缺少 AttributeNode

     2023-02-16     252

关键词:

【中文标题】使用 DOMDocument 生成站点地图:输出中缺少 AttributeNode【英文标题】:generating sitemap with DOMDocument : missing AttributeNode in the output 【发布时间】:2022-01-03 21:34:45 【问题描述】:

我正在尝试生成 sitemap.xml,这是我的代码的简化版本

    $dom = new \DOMDocument();
    $dom->encoding = 'utf-8';
    $dom->xmlVersion = '1.0';
    $dom->formatOutput = true;
    $xml_file_name = './sitemap.xml';
    $urlset = $dom->createElement('urlset');

    $attr_ = new \DOMAttr('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance");
    $urlset->setAttributeNode($attr_);

    $url_node = $dom->createElement('url');

    $url_node_loc = $dom->createElement('loc',   'http://localhost' );
    $url_node->appendChild($url_node_loc);

    $url_node_lastmod = $dom->createElement('lastmod',  '2021-08-03T22:17:47+04:30' );
    $url_node->appendChild($url_node_lastmod);

    $urlset->appendChild($url_node);

    $dom->appendChild($urlset);
    $dom->save($xml_file_name);
    dd('done');

这是我的 sitemap.xml 中的输出

This XML file does not appear to have any style information associated with it. The document tree is shown below.

<urlset>
    <url>
        <loc>http://localhost</loc>
        <lastmod>2021-08-03T22:17:47+04:30</lastmod>
    </url>
</urlset>

我需要为我的urlset 标签添加一些属性,这就是我的做法

    $attr_ = new \DOMAttr('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance");
    $urlset->setAttributeNode($attr_);

但由于某种原因,这没有出现在我的站点地图文件中,urlset 没有属性

【问题讨论】:

【参考方案1】:

使用setAttribute() 而不是setAttributeNode()

$urlset->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');

【讨论】:

【参考方案2】:

这不是有效的站点地图。站点地图使用 XML 命名空间 (https://www.sitemaps.org/protocol.html)

要使用命名空间创建节点,您应该使用带有 *NS 后缀的命名空间感知 DOM 方法。这将根据需要添加命名空间定义。

xmlns:xsi 是一个命名空间定义。它们可以被视为保留命名空间 http://www.w3.org/2000/xmlns/ 中的属性节点。

$xmlns = [
  'sitemap' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
  'xmlns' => 'http://www.w3.org/2000/xmlns/',  
  'xsi' => 'http://www.w3.org/2001/XMLSchema-instance',  
];

$document = new \DOMDocument('1.0', 'utf-8');
$document->formatOutput = true;
    
$urlset = $document->appendChild(
    $document->createElementNS($xmlns['sitemap'], 'urlset')
);
// explict namespace definition
$urlset->setAttributeNS(
    $xmlns['xmlns'], 'xmlns:xsi', $xmlns['xsi']
);

$url_node = $urlset->appendChild(
  $document->createElementNS($xmlns['sitemap'], 'url')
);

$url_node
  ->appendChild($document->createElementNS($xmlns['sitemap'], 'loc'))
  ->textContent = 'http://localhost';
$url_node
  ->appendChild($document->createElementNS($xmlns['sitemap'], 'lastmod'))
  ->textContent = '2021-08-03T22:17:47+04:30';
  
echo $document->saveXML();  

输出:

<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <url>
    <loc>http://localhost</loc>
    <lastmod>2021-08-03T22:17:47+04:30</lastmod>
  </url>
</urlset>

【讨论】:

如何使用反应路由器生成站点地图

】如何使用反应路由器生成站点地图【英文标题】:Howtogeneratesitemapwithreactrouter【发布时间】:2016-08-2912:29:02【问题描述】:我试图弄清楚如何在reactJS服务器端(快速)网络应用程序中动态生成站点地图。我正在使用反应路由器... 查看详情

在 Drupal 8 站点中找不到类“DOMDocument”

】在Drupal8站点中找不到类“DOMDocument”【英文标题】:class"DOMDocument"notfoundinaDrupal8site【发布时间】:2018-02-2102:50:59【问题描述】:我在我的Drupal8站点的一个页面上发现了一个错误;当我访问它时它总是显示此消息错误:... 查看详情

我可以使用 WGET 生成给定 URL 的网站的站点地图吗?

】我可以使用WGET生成给定URL的网站的站点地图吗?【英文标题】:CanIuseWGETtogenerateasitemapofawebsitegivenitsURL?【发布时间】:2011-04-2607:47:18【问题描述】:我需要一个可以抓取网站并以纯文本或类似格式返回所有抓取页面列表的脚... 查看详情

使用 PHP 动态创建站点地图 [重复]

】使用PHP动态创建站点地图[重复]【英文标题】:SitemapDynamicCreationwithPHP[duplicate]【发布时间】:2019-06-2208:29:18【问题描述】:我正在尝试使用php生成有效的站点地图。逻辑很简单。我将所有^(.+)index_sitemal.xml请求转发到.htaccess中... 查看详情

我可以从站点地图生成 ASP.NET MVC 路由吗?

...我正在考虑为即将到来的项目学习ASP.NETMVC框架。我可以使用高级路由根据站点地图层次结构创建长URL吗?示例导航路径:首页>商店>产品>家用>厨房>炊具>炊具>不粘锅典型(我认为)M 查看详情

markdown站点地图生成(代码片段)

查看详情

如何使用 DOMDocument 编写 XML 自闭标签

】如何使用DOMDocument编写XML自闭标签【英文标题】:HowtowriteXMLselfclosingtagusingDOMDocument【发布时间】:2014-06-3015:09:44【问题描述】:我正在使用PHP生成XML,我正在使用DOMDocument生成XML标记。如何使用DOMDocument创建自闭标签?$doc2=newDO... 查看详情

javascript基于exportpathmap为nextjs静态站点生成站点地图xml(代码片段)

查看详情

如何修复 PHP XML 站点地图编码错误

...gerror【发布时间】:2019-06-1003:06:09【问题描述】:我正在使用PHP创建XML站点地图。XML值来自数据库,并使用以下代码生成XML站点地图。header("Content-Type:application/xml;charset=utf-8");echo\'<?xmlversion="1.0"enc 查看详情

Wordpress Yoast 从 XML 站点地图中排除帖子

...itemap【发布时间】:2017-11-1518:07:14【问题描述】:我正在使用YoastSEO插件,我正在尝试使用“wpseo_sitemap_entry”过滤器从帖子XML站点地图中手动排除帖子,但到目前为止还没有运气。这是我当前的代码:functionsitemap_exclude_pos 查看详情

谷歌web站点安全扫描软件skipfish安装配置使用

一:简介skipfish是什么?Skipfish是一个积极的Web应用程序的安全性侦察工具。它准备了一个互动为目标的网站的站点地图进行一个递归爬网和基于字典的探头。然后,将得到的地图是带注释的与许多活性(但希望非破坏性的)安... 查看详情

phpwordpressyoastseo插件,为自定义url生成自定义站点地图(代码片段)

查看详情

phpwordpressyoastseo插件,为自定义url生成自定义站点地图(代码片段)

查看详情

什么是sitemap?

...文件中。以便于第三方(比如搜索引擎)、新闻订阅软件使用和更新。2、用户导航网站地图用于用户导航的网站地图,是为方便用户进入各个网站位置而设计的。这种站点地图是根据网站的结构、框架、内容,生成的导航网页... 查看详情

CakePHP Xml 实用程序库触发 DOMDocument 警告

】CakePHPXml实用程序库触发DOMDocument警告【英文标题】:CakePHPXmlutilitylibrarytriggersDOMDocumentwarning【发布时间】:2014-05-2206:54:51【问题描述】:我正在使用CakePHP的Xmlcorelibrary在视图中生成XML:$xml=Xml::build($data,array(\'return\'=>\'domdocumen... 查看详情

wordpress免插件生成完整站点地图(sitemap.xml)的php代码

让这个代码更加完善,可以同时生成首页、文章、单页面、分类和标签的sitemap!一、PHP代码<?phprequire(‘./wp-blog-header.php‘);header("Content-type:text/xml");header(‘HTTP/1.1200OK‘);$posts_to_show=1000;echo‘<?xmlversion="1.0"encoding="U 查看详情

使用 dynamicNodeProvider 的子节点

】使用dynamicNodeProvider的子节点【英文标题】:WorkingwithchildnodesofdynamicNodeProvider【发布时间】:2012-01-2708:06:01【问题描述】:我使用thisproject来生成站点地图路径。在我的应用程序中我希望站点地图路径保持如下:路径:Home&gt;... 查看详情

GWT 请求生成器问题(相同的站点策略问题?)

...ot:8094运行)2)我编写了一个非常简单的GWT应用程序,它将使用RequestBuilder将GET设置到 查看详情