Home >Backend Development >PHP Tutorial >PHP读取XML值的代码(推荐)_PHP

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

WBOY
WBOYOriginal
2016-06-01 12:17:21710browse

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

XML文件(cy.xml)如下:
复制代码 代码如下:


1
2
3


Php文件(cy.php)如下:
复制代码 代码如下:
$xml = new DOMDocument();
$xml->load('cy.xml');
foreach($xml->getElementsByTagName('list') as $list)
{
$value = $list->firstChild->nodeValue;
echo $value.”
”;
}
?>

cy.php的运行结果:
1
2
3

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

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

cy.xml如下:
复制代码 代码如下:



1
2
3



cy.php如下(和第一种情况没有任何变化):
复制代码 代码如下:
$xml = new DOMDocument();
$xml->load('cy.xml');
foreach($xml->getElementsByTagName('list') as $list)
{
$value = $list->firstChild->nodeValue;
echo $value.”
”;
}
?>

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

Php读取XML第三种情况:

XML文件(cy.xml)如下:
复制代码 代码如下:



1
2
3


4
5
6



Php文件(cy.php)如下(和第一次依然没有变化):
复制代码 代码如下:
$xml = new DOMDocument();
$xml->load('cy.xml');
foreach($xml->getElementsByTagName('list') as $list)
{
$value = $list->firstChild->nodeValue;
echo $value.”
”;
}
?>

cy.php的输出结果:
1
2
3
4
5
6

===========

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

XML文件(cy.xml)如下:
复制代码 代码如下:



1
2
3


4
5
6



Php文件(cy.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.”
”;
}
}
?>

cy.php输出结果:
1
2
3
4
5
6

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

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

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

XML文件(cy.xml)如下:
复制代码 代码如下:




1
2
3


4
5
6


7
8
9




Php文件(cy.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.”
”;
}
}
?>

cy.php输出结果为:
1
2
3
4
5
6

为什么

7
8
9

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

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

XML文件(cy.xm)如下:
复制代码 代码如下:



1
2
3


4
5
6


7
8
9



Php文件(cy.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.”
”;
}
}
$m = $xml->getElementsByTagName('m');
foreach( $m as $m)
{
$list = $m->getElementsByTagName( “list” );
foreach ( $list as $list )
{
$value = $list->firstChild->nodeValue;
echo $value.”
”;
}
}
?>

cy.php输出结果:
1
2
3
4
5
6
7
8
9

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

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

XML文件(cy.xml)如下:
复制代码 代码如下:



a
1
2
3


b
4
5
6


c
7
8
9



那么,我们如何只读出

中的值呢?

Php文件(cy.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.”
”;
}
$title = $main->getElementsByTagName( “title” );
foreach ( $title as $title )
{
$value = $title->firstChild->nodeValue;
echo $value.”
”;
}
}

$m = $xml->getElementsByTagName('m');
foreach( $m as $m)
{
$list = $m->getElementsByTagName( “list” );
foreach ( $list as $list )
{
$value = $list->firstChild->nodeValue;
echo $value.”
”;
}
}
?>

cy.php输出结果:
1
2
3
a
4
5
6

7
8
9

想一下,如何读出的值?

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

XML文件(cy.xml)如下:
复制代码 代码如下:



This is Text One
This is Text Two
This is Text Three


This is Text Four
This is Text Five
This is Text Six



Php文件(cy.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.”
”;
echo $value.”
”;
echo $id.”
”;
}
}
?>

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

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

XML文件(cy.xml)如下:
复制代码 代码如下:




czbin xml版块
xml的相关文章


czbin php版块
php的相关文章


czbin ajax版块
ajax的相关文章




Php文件(cy.php)如下:
复制代码 代码如下:
$xml = simplexml_load_file('sxml.xml');
$part = $xml->site->part;
foreach ( $part as $content )
{
echo $content['id'].”
”;
echo $content->title.”
”;
echo $content->title['id'].”
”;
echo $content->describe.”
”;
}
?>

cy.php输出结果:
1
czbin xml版块
a
xml的相关文章
2
czbin php版块

php的相关文章
3
czbin ajax版块
c
ajax的相关文章

怎么样?的确很简单吧!
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn