博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php如何读出xml的节点内容 两个例子
阅读量:6967 次
发布时间:2019-06-27

本文共 4786 字,大约阅读时间需要 15 分钟。

第一个例子:

  PHP与XML联系紧密,下面是一个较简单的解析XML节点数据的例子,示例中自定义有一个XML样例文件代码,通过PHP将依次读取出XML节点中的id、name和email数据,是读取较大的XML文件的前提,新手的话,那就更应该参考了

 

01    
04
05
06
Foo
07
foo@bar.com08
09
10
Foobar
11
foobar@foo.com12
13
";14 //开始解析XML15 $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, '
';21 }22 ?>

 

 

 

 

第二个例子:

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_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输出结果:
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_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输出结果:
1
2
3
a
4
5
6
b
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_r('LevelOne');//按照名称取得节点,返回所有节点的集合,不过这里这样读LevelOne是没有意义的....
$LevelOne = $xml->getElementsByTagName_r('LevelOne')->item(0);//返回第一个LevelOne节点中的内容
$LevelTwo = $LevelOne->getElementsByTagName_r('LevelTwo'); //按照名称取得节点,返回所有LevelTwo
foreach ( $LevelTwo as $Content )//循环读出所有LevelTwo,并在循环里,把LevelTwo用Content表示
{
$LevelThree = $Content->getElementsByTagName_r('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_r('LevelOne')这样的方式取得节点,那么,读取里面的内容,需要用foreach 循环,因为$LevelOne = $xml->getElementsByTagName ('LevelOne')返回的,是一个集合,并不是一个具体的节点----仅管叫做LevelOne的节点只有一个....
如果用$LevelOne = $xml->getElementsByTagName_r('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版块
b
php的相关文章
3
czbin ajax版块
c
ajax的相关文章
怎么样?的确很简单吧!

转载于:https://www.cnblogs.com/dashafa/p/4024439.html

你可能感兴趣的文章
ES2015入门系列1-初识ES2015
查看>>
Python: 链式赋值的坑
查看>>
Node.js开发中的Cookie和Session
查看>>
【收藏】8段JQuery处理表单的代码片段,很实用
查看>>
利用 Css 制作精美的卡片UI
查看>>
Jmeter使用陷阱
查看>>
夏日葵电商:微信商城系统开发,分享产品运营几大细节
查看>>
ios证书--快速创建iOS证书及描述文件工具
查看>>
web前端开发前的环境搭建
查看>>
jQuery源码分析之noConflict()
查看>>
7步学会在Windows下上架iOS APP流程
查看>>
PHP使用CURL详解
查看>>
nodejs源码中的require问题
查看>>
带标签的长标题省略展示的实现
查看>>
区块链技术精华:四十种智能合约支持平台(四)
查看>>
DevOps是90%的改变和10%的技术
查看>>
Yelp研发实践:使用服务拆分单块应用
查看>>
WordPress.com使用JavaScript替换掉PHP
查看>>
代码自解释不是不写注释的理由
查看>>
Racket 6.11提供了稳定的细化类型和依赖函数特性
查看>>