PHP读取XML值的代码(推荐)
程序员文章站
2022-04-28 15:20:41
用php读取xml最简单的情况: xml文件(cy.xml)如下: 复制代码 代码如下:
用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的运行结果:
1
2
3
=============
用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的运行结果和第一次也相同:
1
2
3
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的输出结果:
1
2
3
4
5
6
===========
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输出结果:
1
2
3
4
5
6
为什么两次的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输出结果为:
1
2
3
4
5
6
为什么
<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输出结果:
1
2
3
4
5
6
7
8
9
===============
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输出结果:
1
2
3
a
4
5
6
7
8
9
想一下,如何读出<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输出结果:
1
czbin xml版块
a
xml的相关文章
2
czbin php版块
php的相关文章
3
czbin ajax版块
c
ajax的相关文章
怎么样?的确很简单吧!
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的运行结果:
1
2
3
=============
用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的运行结果和第一次也相同:
1
2
3
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的输出结果:
1
2
3
4
5
6
===========
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输出结果:
1
2
3
4
5
6
为什么两次的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输出结果为:
1
2
3
4
5
6
为什么
<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输出结果:
1
2
3
4
5
6
7
8
9
===============
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输出结果:
1
2
3
a
4
5
6
7
8
9
想一下,如何读出<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输出结果:
1
czbin xml版块
a
xml的相关文章
2
czbin php版块
php的相关文章
3
czbin ajax版块
c
ajax的相关文章
怎么样?的确很简单吧!