PHP读取XML值的代码(推荐)

时间:2022-09-23 22:59:08

用Php读取XML最简单的情况: 

XML文件(cy.xml)如下: 

复制代码代码如下:


<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<list>1</list> 
<list>2</list> 
<list>3</list> 
</xml> 


Php文件(cy.php)如下: 

复制代码代码如下:


<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
foreach($xml->getElementsByTagName('list') as $list) 

$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 

?> 


cy.php的运行结果: 




============= 

用Php读取XML稍微复杂一点的情况: 

cy.xml如下: 

复制代码代码如下:


<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<main> 
<list>1</list> 
<list>2</list> 
<list>3</list> 
</main> 
</xml> 


cy.php如下(和第一种情况没有任何变化): 

复制代码代码如下:


<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
foreach($xml->getElementsByTagName('list') as $list) 

$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 

?> 


cy.php的运行结果和第一次也相同: 




Php读取XML第三种情况: 

XML文件(cy.xml)如下: 

复制代码代码如下:


<?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> 
</xml> 


Php文件(cy.php)如下(和第一次依然没有变化): 

复制代码代码如下:


<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
foreach($xml->getElementsByTagName('list') as $list) 

$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 

?> 


cy.php的输出结果: 







=========== 

Php读取XML第四种情况,保持cy.xml不变,改变cy.php: 

XML文件(cy.xml)如下: 

复制代码代码如下:


<?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> 
</xml> 


Php文件(cy.php)如下: 

复制代码代码如下:


<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
$main = $xml->getElementsByTagName('main'); 
foreach( $main as $main) 

$list = $main->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 

$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 


?> 


cy.php输出结果: 







为什么两次的cy.php不同,但输出结果是相同的?让我们来看下一个例子 

============== 

Php读取XML第五种情况,改变cy.xml,使cy.php保持第四种情况: 

XML文件(cy.xml)如下: 

复制代码代码如下:


<?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('main'); 
foreach( $main as $main) 

$list = $main->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 

$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 


?> 


cy.php输出结果为: 







为什么 
<m> 
<list>7</list> 
<list>8</list> 
<list>9</list> 
</m> 
中的7,8,9没有被读出来? 
因为我们的cy.php只读取<main></main>标记中的内容.<m></m>标记中的内容是不会被读取的. 
我们这里所提到的”标记”,在XML里被称做”节点”; 
关于”节点”的相关概念,我们将在以后说明. 

Php读取XML情况六,再foreach一次,我们把7,8,9读出来!: 

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('main'); 
foreach( $main as $main) 

$list = $main->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 

$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 


$m = $xml->getElementsByTagName('m'); 
foreach( $m as $m) 

$list = $m->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 

$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 


?> 


cy.php输出结果: 










=============== 

Php读取XML情况七,cy.xml变得更复杂一些: 

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> 


那么,我们如何只读出<main></main>内<title></title>中的值呢? 

Php文件(cy.php)如下: 

复制代码代码如下:


<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
$main = $xml->getElementsByTagName('main'); 
foreach( $main as $main) 

$list = $main->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 

$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 

$title = $main->getElementsByTagName( “title” ); 
foreach ( $title as $title ) 

$value = $title->firstChild->nodeValue; 
echo $value.”<br />”; 



$m = $xml->getElementsByTagName('m'); 
foreach( $m as $m) 

$list = $m->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 

$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 


?> 


cy.php输出结果: 












想一下,如何读出<m>中<title></title>的值? 

Php读取XML再通过一个例子巩固一下: 

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(); //建立一个DOMDocument 
$xml->load('cy.xml'); //Php指定需要读取xml文件的位置 
$LevelOne = $xml->getElementsByTagName('LevelOne');//按照名称取得节点,返回所有节点的集合,不过这里这样读LevelOne是没有意义的…. 
$LevelOne = $xml->getElementsByTagName('LevelOne')->item(0);//返回第一个LevelOne节点中的内容 
$LevelTwo = $LevelOne->getElementsByTagName('LevelTwo'); //按照名称取得节点,返回所有LevelTwo 
foreach ( $LevelTwo as $Content )//循环读出所有LevelTwo,并在循环里,把LevelTwo用Content表示 

$LevelThree = $Content->getElementsByTagName('LevelThree');//返回所有LevelThree 
foreach ( $LevelThree as $Concert ) 

$name = $Concert->nodeName;//节点名称 
$value = $Concert->nodeValue;//节点值 
$id = $Concert->getAttribute('id');//”id”属性值 
echo $name.”<br />”; 
echo $value.”<br />”; 
echo $id.”<br />”; 


?> 


如果用$LevelOne = $xml->getElementsByTagName('LevelOne')这样的方式取得节点,那么,读取里面的内容,需要用foreach 循环,因为$LevelOne = $xml->getElementsByTagName ('LevelOne')返回的,是一个集合,并不是一个具体的节点—-仅管叫做LevelOne的节点只有一个…. 
如果用$LevelOne = $xml->getElementsByTagName('LevelOne')->item(0)这样的方式取得节点,那么读取里面的内 容,可以直接$LevelOne->xxxxxx,因为这样返回的是一个具体的节点。 

现在提供一种很简便的方法用PHP读取XML: 

XML文件(cy.xml)如下: 

复制代码代码如下:


<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<site> 
<part id=”1″> 
<title id=”a”>czbin xml版块</title> 
<describe>xml的相关文章</describe> 
</part> 
<part id=”2″> 
<title id=”b”>czbin php版块</title> 
<describe>php的相关文章</describe> 
</part> 
<part id=”3″> 
<title id=”c”>czbin ajax版块</title> 
<describe>ajax的相关文章</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输出结果: 

czbin xml版块 

xml的相关文章 

czbin php版块 

php的相关文章 

czbin ajax版块 

ajax的相关文章 

怎么样?的确很简单吧!