php如何读出xml的节点内容 两个例子
第一個(gè)例子:
? PHP與XML聯(lián)系緊密,下面是一個(gè)較簡(jiǎn)單的解析XML節(jié)點(diǎn)數(shù)據(jù)的例子,示例中自定義有一個(gè)XML樣例文件代碼,通過(guò)PHP將依次讀取出XML節(jié)點(diǎn)中的id、name和email數(shù)據(jù),是讀取較大的XML文件的前提,新手的話,那就更應(yīng)該參考了:
?
01 <?php 02 //定義一個(gè)XML樣例文件 03 $xml_string="<?xml version='1.0'?> 04 <users> 05 <user id='398'> 06 <name>Foo</name> 07 <email>foo@bar.com</name> 08 </user> 09 <user id='867'> 10 <name>Foobar</name> 11 <email>foobar@foo.com</name> 12 </user> 13 </users>"; 14 //開(kāi)始解析XML 15 $xml = simplexml_load_string($xml_string); 16 foreach ($xml->user as $user) 17 { 18 echo $user['id'], ' '; 19 echo $user->name, ' '; 20 echo $user->email, '<br />'; 21 } 22 ?>?
?
?
?
第二個(gè)例子:
Php讀取XML情況六,再foreach一次,我們把7,8,9讀出來(lái)!:
XML文件(cy.xm)如下:
<?xml version="1.0" encoding="gb2312"?>
<xml>
<main>
<list>1</list>
<list>2</list>
<list>3</list>
</main>
<main>
<list>4</list>
<list>5</list>
<list>6</list>
</main>
<m>
<list>7</list>
<list>8</list>
<list>9</list>
</m>
</xml>
Php文件(cy.php)如下:
<?php
$xml = new DOMDocument();
$xml->load('cy.xml');
$main = $xml->getElementsByTagName_r('main');
foreach( $main as $main)
{
$list = $main->getElementsByTagName_r( "list" );
foreach ( $list as $list )
{
$value = $list->firstChild->nodeValue;
echo $value."<br />";
}
}
$m = $xml->getElementsByTagName_r('m');
foreach( $m as $m)
{
$list = $m->getElementsByTagName_r( "list" );
foreach ( $list as $list )
{
$value = $list->firstChild->nodeValue;
echo $value."<br />";
}
}
?>
cy.php輸出結(jié)果:
1
2
3
4
5
6
7
8
9
===============
Php讀取XML情況七,cy.xml變得更復(fù)雜一些:
XML文件(cy.xml)如下:
<?xml version="1.0" encoding="gb2312"?>
<xml>
<main>
<title>a</title>
<list>1</list>
<list>2</list>
<list>3</list>
</main>
<main>
<title>b</title>
<list>4</list>
<list>5</list>
<list>6</list>
</main>
<m>
<title>c</title>
<list>7</list>
<list>8</list>
<list>9</list>
</m>
</xml>
那么,我們?nèi)绾沃蛔x出<main></main>內(nèi)<title></title>中的值呢?
Php文件(cy.php)如下:
<?php
$xml = new DOMDocument();
$xml->load('cy.xml');
$main = $xml->getElementsByTagName_r('main');
foreach( $main as $main)
{
$list = $main->getElementsByTagName_r( "list" );
foreach ( $list as $list )
{
$value = $list->firstChild->nodeValue;
echo $value."<br />";
}
$title = $main->getElementsByTagName_r( "title" );
foreach ( $title as $title )
{
$value = $title->firstChild->nodeValue;
echo $value."<br />";
}
}
$m = $xml->getElementsByTagName_r('m');
foreach( $m as $m)
{
$list = $m->getElementsByTagName_r( "list" );
foreach ( $list as $list )
{
$value = $list->firstChild->nodeValue;
echo $value."<br />";
}
}
?>
cy.php輸出結(jié)果:
1
2
3
a
4
5
6
b
7
8
9
想一下,如何讀出<m>中<title></title>的值?
Php讀取XML再通過(guò)一個(gè)例子鞏固一下:
XML文件(cy.xml)如下:
<?xml version="1.0" encoding="gb2312"?>
<LevelOne>
<LevelTwo>
<LevelThree id="1">This is Text One</LevelThree>
<LevelThree id="2">This is Text Two</LevelThree>
<LevelThree id="3">This is Text Three</LevelThree>
</LevelTwo>
<LevelTwo>
<LevelThree id="4">This is Text Four</LevelThree>
<LevelThree id="5">This is Text Five</LevelThree>
<LevelThree id="6">This is Text Six</LevelThree>
</LevelTwo>
</LevelOne>
Php文件(cy.php)如下:
<?php
$xml = new DOMDocument(); //建立一個(gè)DOMDocument
$xml->load('cy.xml'); //Php指定需要讀取xml文件的位置
$LevelOne = $xml->getElementsByTagName_r('LevelOne');//按照名稱取得節(jié)點(diǎn),返回所有節(jié)點(diǎn)的集合,不過(guò)這里這樣讀LevelOne是沒(méi)有意義的....
$LevelOne = $xml->getElementsByTagName_r('LevelOne')->item(0);//返回第一個(gè)LevelOne節(jié)點(diǎn)中的內(nèi)容
$LevelTwo = $LevelOne->getElementsByTagName_r('LevelTwo'); //按照名稱取得節(jié)點(diǎn),返回所有LevelTwo
foreach ( $LevelTwo as $Content )//循環(huán)讀出所有LevelTwo,并在循環(huán)里,把LevelTwo用Content表示
{
$LevelThree = $Content->getElementsByTagName_r('LevelThree');//返回所有LevelThree
foreach ( $LevelThree as $Concert )
{
$name = $Concert->nodeName;//節(jié)點(diǎn)名稱
$value = $Concert->nodeValue;//節(jié)點(diǎn)值
$id = $Concert->getAttribute('id');//"id"屬性值
echo $name."<br />";
echo $value."<br />";
echo $id."<br />";
}
}
?>
如果用$LevelOne = $xml->getElementsByTagName_r('LevelOne')這樣的方式取得節(jié)點(diǎn),那么,讀取里面的內(nèi)容,需要用foreach 循環(huán),因?yàn)?LevelOne = $xml->getElementsByTagName ('LevelOne')返回的,是一個(gè)集合,并不是一個(gè)具體的節(jié)點(diǎn)----僅管叫做LevelOne的節(jié)點(diǎn)只有一個(gè)....
如果用$LevelOne = $xml->getElementsByTagName_r('LevelOne')->item(0)這樣的方式取得節(jié)點(diǎn),那么讀取里面的內(nèi) 容,可以直接$LevelOne->xxxxxx,因?yàn)檫@樣返回的是一個(gè)具體的節(jié)點(diǎn)。
?
現(xiàn)在提供一種很簡(jiǎn)便的方法用PHP讀取XML:
XML文件(cy.xml)如下:
<?xml version="1.0" encoding="gb2312"?>
<xml>
<site>
<part id="1">
<title id="a">czbin xml版塊</title>
<describe>xml的相關(guān)文章</describe>
</part>
<part id="2">
<title id="b">czbin php版塊</title>
<describe>php的相關(guān)文章</describe>
</part>
<part id="3">
<title id="c">czbin ajax版塊</title>
<describe>ajax的相關(guān)文章</describe>
</part>
</site>
</xml>
Php文件(cy.php)如下:
<?php
$xml = simplexml_load_file('sxml.xml');
$part = $xml->site->part;
foreach ( $part as $content )
{
echo $content['id']."<br />";
echo $content->title."<br />";
echo $content->title['id']."<br />";
echo $content->describe."<br />";
}
?>
cy.php輸出結(jié)果:
1
czbin xml版塊
a
xml的相關(guān)文章
2
czbin php版塊
b
php的相關(guān)文章
3
czbin ajax版塊
c
ajax的相關(guān)文章
怎么樣?的確很簡(jiǎn)單吧!
轉(zhuǎn)載于:https://www.cnblogs.com/dashafa/p/4024439.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的php如何读出xml的节点内容 两个例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 多线程(C++)临界区Critical
- 下一篇: AVL树----java