苍天有泪 发表于 2017-3-30 11:11:35

PHP 简单处理 XML

  PS:原创文章,如需转载,请注明出处,谢谢!
    

  本文地址:http://flyer0126.iteye.com/blog/1502504

  一、手动输出xml

/*
* 手动输出xml
* @author flyer0126
* @since 2012/4/27
*/
header("Content-Type:text/xml");
print '<?xml version="1.0"?>'."\n";
print "<shows>\n";
$shows = array(
array(
'name' => 'aa',
'channel' => 'a1',
'start' => 'a2'
),
array(
'name' => 'bb',
'channel' => 'b1',
'start' => 'b2'
),
array(
'name' => 'cc',
'channel' => 'c1',
'start' => 'c2'
)
);
foreach($shows as $show)
{
print "<show>\n";
foreach($show as $tag => $val)
{
print "<$tag>".htmlspecialchars($val)."</$tag>\n";
}
print "</show>\n";
}
print "</shows>\n";
/**
<?xml version="1.0"?>
<shows>
<show>
<name>aa</name>
<channel>a1</channel>
<start>a2</start>
</show>
<show>
<name>bb</name>
<channel>b1</channel>
<start>b2</start>
</show>
<show>
<name>cc</name>
<channel>c1</channel>
<start>c2</start>
</show>
</shows>
**/
   二、通过DOMDocument生成xml

/*
* 通过DOMDocument生成xml
* @author flyer0126
* @since 2012/4/27
*/
// 创建新文档
$dom = new DOMDocument("1.0", "UTF-8");
// 创建根元素humans,并将其添加至文档
$humans = $dom->appendChild($dom->createElement("humans"));
// 创建根元素zhangying,并将其添加至humans
$zhangying = $humans->appendChild($dom->createElement("zhangying"));
// 创建name元素,并将其添加至zhangying
$name = $zhangying->appendChild($dom->createElement("name"));
$name->appendChild($dom->createTextNode("张映"));
$sex = $zhangying->appendChild($dom->createElement("sex"));
$sex->appendChild($dom->createTextNode("男"));
$old = $zhangying->appendChild($dom->createElement("old"));
$old->appendChild($dom->createTextNode("28"));
// 创建根元素tank,并将其添加至humans
$tank = $humans->appendChild($dom->createElement("tank"));
// 创建name元素,并将其添加至tank
$name = $tank->appendChild($dom->createElement("name"));
$name->appendChild($dom->createTextNode("tank"));
$sex = $tank->appendChild($dom->createElement("sex"));
$sex->appendChild($dom->createTextNode("男"));
$old = $tank->appendChild($dom->createElement("old"));
$old->appendChild($dom->createTextNode("28"));

/*// 设置author元素
$author = $book->appendChild($dom->createElement("author"));
$author->appendChild($dom->createTextNode("zhangh"));
$author->setAttribute("class", "win_close");*/
// 输出
$dom->formatOutput = true;
header('Content-Type:text/xml');
echo $dom->saveXML();
// 将文档表现形式放于book变量中
//$book = $dom->saveXML();
// 将文档输出为book.xml文件
//$dom->save("humans.xml");
/**
<?xml version="1.0 encoding="UTF-8"?>
<humans>
<zhangying>
<name>张映</name>
<sex>男</sex>
<old>28</old>
</zhangying>
<tank>
<name>tank</name>
<sex>男</sex>
<old>28</old>
</tank>
</humans>
**/
   三、xml的读取

/*
* xml的读取
* @author flyer0126
* @since 2012/4/27
*/
// 1. 利用simplexml_load_file读取简单的xml文件
$humans = simplexml_load_file("humans.xml");
foreach($humans as $key => $human)
{
echo $human->name."->".$human->sex."->".$human->old."\n";
}
/**
张映->男->28
tank->男->28
**/

// 2. 利用DOMDocument读取xml
$dom = new DOMDocument();
$dom->load("humans.xml");
$humans = $dom->getElementsByTagName("humans");
foreach($humans as $key=>$human)
{
$names = $human->getElementsByTagName("name");
$olds = $human->getElementsByTagName("old");
$sexes = $human->getElementsByTagName("sex");
foreach($names as $k=>$name)
{
$name = $names->item($k)->nodeValue;
$sex = $sexes->item($k)->nodeValue;
$old = $olds->item($k)->nodeValue;
echo "$name->$sex->$old\n";
}
}
/**
张映->男->28
tank->男->28
**/

// 3. 利用正则来获取数据
$xml = '';
$f = fopen("humans.xml", "r");
while($data = fread($f, 2096))
{
$xml .= $data;
}
fclose($f);
preg_match_all('/\<humans\>(.*?)\<\/humans\>/s', $xml, $humans);
foreach($humans as $human)
{
preg_match_all('/\<name\>(.*?)\<\/name\>/s', $human, $names);
preg_match_all('/\<sex\>(.*?)\<\/sex\>/s', $human, $sexes);
preg_match_all('/\<old\>(.*?)\<\/old\>/s', $human, $olds);
}
foreach($names as $k=>$name)
{
echo $names[$k].'-'.$sexes[$k].'-'.$olds[$k]."\n";
}
/**
张映->男->28
tank->男->28
**/

// 4. 利用XMLReader获取数据
$reader = new XMLReader();
$reader->open("humans.xml");
$i = 1;
while($reader->read())
{
if($reader->nodeType == XMLReader::TEXT)
{
if($i%3)
{
echo $reader->value;
}else
{
echo $reader->value."\n";
}
$i++;
}
}
/**
张映男28
tank男28
**/
页: [1]
查看完整版本: PHP 简单处理 XML