PHP DOMDocument-多次插入之前
我希望在一个XML文件的多个位置添加相同的内容。仅供参考-首次提交文件。 假设xml看起来像PHP DOMDocument-多次插入之前,php,xml,domdocument,Php,Xml,Domdocument,我希望在一个XML文件的多个位置添加相同的内容。仅供参考-首次提交文件。 假设xml看起来像 <rrd> <rra> <cdp_prep> <ds> <value>nan</value> </ds> <ds> <value>nan</value> </ds> &l
<rrd>
<rra>
<cdp_prep>
<ds>
<value>nan</value>
</ds>
<ds>
<value>nan</value>
</ds>
<ds>
<value>nan</value>
<ds>
</cdp_prep>
<database>
...
</database>
</rra>
<rra>
<cdp_prep>
<ds>
<value>nan</value>
<ds>
</ds>
<value>nan</value>
<ds>
<ds>
<value>nan</value>
</ds>
</cdp_prep>
<database>
...
</database>
</rra>
</rrd>
楠
楠
楠
...
楠
楠
楠
...
如果我使用类似于
$rrdCDPds=$xRRD->query(“/rrd/rra/cdp_prep/ds”)然后我将得到所有的
元素。在这种情况下,长度为6。但是,我正在尝试在每个
元素的第二个
上插入before。我的问题是,如果我查询“/rrd/rra/cdp_prep”,我如何针对每个
元素的第二个
元素的insertBefore?您可以使用XPath中的子元素
轴选择第二个ds子元素:
/rrd/rra/cdp_prep/child::ds[2]
基本程序是:
选择要用作insertBefore
参考节点的节点。您可以使用子轴和位置测试来实现这一点:cdp\u prep/child::ds[position()=2]
,可以缩写为cdp\u prep/ds[2]
准备要插入的节点
对于每个匹配的引用节点,克隆要插入的节点,然后将其插入
例如:
$dom = new DOMDocument();
$dom->loadXML($xml);
$xp = new DOMXPath($dom);
$newcontent = $dom->createDocumentFragment();
$newcontent->appendChild($dom->createElement('NEWCONTENT'));
$newcontent->appendChild($dom->createTextNode("\n "));
$DSs = $xp->query('/rrd/rra/cdp_prep/ds[2]');
foreach ($DSs as $ds) {
$ds->parentNode->insertBefore($newcontent->cloneNode(true), $ds);
}
echo $dom->saveXML();
xml无效。。您是想关闭ds
元素吗?是的,对不起。星期五下午。。。并在键盘上敲击头部:)