用PHP dom 处理xml,增加或者修改节点
今天有人在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();