php - PHP DOM 将子元素附加到根
问题描述
我正在尝试将子元素附加到预加载的根元素,如下所示
$document = new DOMDocument('1.0', 'UTF-8');
$document->loadXML('<books></books>');
$content = '<books>
<book>
<athors>
<athor>
<name>John Doe</name>
</athor>
</athors>
</book>
</books>';
$books = new DOMDocument()
$books->loadXML($content);
foreach ($books as $book){
$document->appendChild($document->importNode( $book, true ));
}
由于某种原因,结果 xml 文档将如下所示,根元素的结束标记位于文档的开头:
<?xml version="1.0"?>
<books/>
<book>
<athors>
<athor>
<name>John Doe</name>
</athor>
</athors>
</book>
我希望它如下所示:
<?xml version="1.0"?>
<books>
<book>
<athors>
<athor>
<name>John Doe</name>
</athor>
</athors>
</book>
<books/>
解决方案
您正在迭代 中的根元素的子元素$books
,而不是book
元素。然后你追加到的根$document
,而不是books
元素。
您需要深入每个节点以到达适当的节点。
<?php
$document = new DOMDocument('1.0', 'UTF-8');
$document->loadXML('<books></books>');
$documentBooks = $document->childNodes[0];
$content = '<books>
<book>
<athors>
<athor>
<name>John Doe</name>
</athor>
</athors>
</book>
</books>';
$books = new DOMDocument();
$books->loadXML($content);
$bookItems = $books->childNodes[0]->childNodes;
foreach ($bookItems as $book){
$documentBooks->appendChild($document->importNode( $book, true ));
}
echo $document->saveXML();
推荐阅读
- javascript - 如何按对象数组中的任何属性过滤数据?
- r - 跨不同格式创建统一日期
- javascript - React - ajax 调用期间按钮未禁用,toast 不起作用
- ios - 手机上的@Fontface 不显示在手机上
- regex - Google表格(RE2)中的正则表达式“NOT”
- javascript - sinon 中的异步函数存根调用实际的函数调用
- c - Visual Studio Code (mac) 和语言 C 的问题
- python - flask_marshmallow 阻止加载新实体,但允许加载现有实体
- java - Java中的Magic Square程序帮助
- go - 在提供 CSS 时在 Golang 中出现 MIME 类型('text/plain')错误