今天有人在PHP的群里面问这样一个问题:
<?xml version="1.0" coding="utf-8"?>
<country>
<city>北京</city>
<city>香港</city>
<city>上海</city>
</country>
如果在香港前面加上一个<city>杭州</city>。今天请假在家,就花了几分钟,解决了这个问题。
<?php
$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<country>
<city>北京</city>
<city>香港</city>
<city>上海</city>
</country>
XML;
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadXML($xml);
$city = $dom->getElementsByTagName('city');
$element = $dom->createElement('city', '杭州');
$textNode = $dom->createTextNode("\n");
foreach ($city as $node)
{
$value = $node->nodeValue;
if (trim($value) == '香港')
{
//insert before
$node->parentNode->insertBefore($element, $node);
$node->parentNode->insertBefore($textNode, $node);
}
}
echo $dom->saveXML();
$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<country>
<city>北京</city>
<city>香港</city>
<city>上海</city>
</country>
XML;
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadXML($xml);
$city = $dom->getElementsByTagName('city');
$element = $dom->createElement('city', '杭州');
$textNode = $dom->createTextNode("\n");
foreach ($city as $node)
{
$value = $node->nodeValue;
if (trim($value) == '香港')
{
//insert before
$node->parentNode->insertBefore($element, $node);
$node->parentNode->insertBefore($textNode, $node);
}
}
echo $dom->saveXML();