设为首页 收藏本站
查看: 538|回复: 0

[经验分享] PHP 简单处理 XML

[复制链接]

尚未签到

发表于 2017-3-30 11:11:35 | 显示全部楼层 |阅读模式
  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[1] 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[1] as $k=>$name)
{
echo $names[1][$k].'-'.$sexes[1][$k].'-'.$olds[1][$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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-357555-1-1.html 上篇帖子: php 数组转一维 下篇帖子: php mysqli 使用prepare
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表