php如何读出xml的节点内容 两个例子

第一个例子:

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

01    <?php
02    //定义一个XML样例文件
03    $xml_string="<?xml version=‘1.0‘?>
04    <users>
05    <user id=‘398‘>
06    <name>Foo</name>
07    <email>[email protected]</name>
08    </user>
09    <user id=‘867‘>
10    <name>Foobar</name>
11    <email>[email protected]</name>
12    </user>
13    </users>";
14    //开始解析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    ?>

 

第二个例子:

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的相关文章

怎么样?的确很简单吧!

时间: 2024-10-31 03:53:03

php如何读出xml的节点内容 两个例子的相关文章

修改XML的节点内容

这种形式可以修改任何一个节点: XmlDocument doc = new XmlDocument(); doc.Load("Event.xml"); XmlElement events = doc.DocumentElement; XmlNode xn = events; foreach (XmlNode node in xn.ChildNodes) { if (node["事件名"].InnerText == textBox1.Text) { XmlNode x

java通过正则表达式提取XML节点内容

现在有类似<doc>abc</doc><title>3232</title> <doc>只要内容</doc>这么一个串,需要提取abc,3232,只要内容的节点内容 public static List getContext(String html) { List resultList = new ArrayList(); Pattern p = Pattern.compile(">([^</]+)</&q

Mybatis_review之配置文件中的properties节点内容说明

Properties的设置格式 在Demo项目中使用的Mybatis-config.xml文件中的配置如下: <span style="font-family:KaiTi_GB2312;"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&quo

Mybatis_review之配置文件中的typeAliases节点内容说明

Mybatis为什么要提供别名? Mybatis最基础的Demo中体现要做的事情是非常简单的,如果使用原生的JDBC来实现数据库表与对象之间的映射的话,我们应该怎么做呢?首先,使用ClassForName在静态代码块中注册一个驱动类.然后,使用静态类DriverManager来获取一个数据库的连接对象,当然在这一步我们需要提供URL,username以及password等用于连接数据库以及鉴权的信息.第三,得到连接之后,建立statement或者是preparedStatment对象,第四,执行

web.xml加载顺序与web.xml常用节点解析

web.xml加载顺序 应用服务器启动时web.xml加载过程,至于这些节点在xml文件中的前后顺序没有关系,不过有些应用服务器,我曾碰到过的 websphere就严格要求web.xml的节点顺序,否则部署不成功,所以还是赞成按照web.xml标准格式写 总的来说, web.xml 的加载顺序是:context-param --> listener --> filter --> servlet 其中, 如果 web.xml 中出现了相同的节点, 则是按照在配置文件中出现的先后顺序来加载的

Mybatis_review之配置文件中的typeHandlers节点内容说明

Mybatis为什么要在configuration file中提供typeHandlers节点 因为java类型与数据库中保存的类型是有很大差异的,例如 在java中的类型为int,但是在数据库中可能为int也可能为number.因此建立数据库的类型映射是非常重要的.为了兼容多个数据库,以及考虑到未来数据库的发展,Mybatis采用了插入的方式来解决类型映射的问题. 我们可以在mybatis的文件夹org.apache.ibatis.type的下面看到很多中typeHandler.与其他的框架中

Mybatis_review之配置文件中的objectFactory节点内容说明

Mybatis中有一个默认的创建类的对象,名字叫做DefaultObjectFactory,这个类用于负责创建对象实体类.从这个类的外部看,这个类的主要作用就是根据一个类的类型得到该类的一个实体对象,比如,我们给他一个Tiger的type,他将会给我们一个Tiger的实体对象,我们给他一个java.lang.List对象,他将会给我们一个List的实体对象.这个其实从它的名字上就能看出来. 这个类在官方文档中介绍到DefaultObjectFactory这个类的对象做的事情是非常少的,仅仅是创建

[ jquery 属性 .context ] 返回传给jQuery()的原始的DOM节点内容

返回传给jQuery()的原始的DOM节点内容:即jQuery()的第二个参数.如果没有指定,那么context指向当前的文档(document),可以与selector一起使用,用于精确检测选择器查询情况 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content=

.Net常用技巧_读取XML某节点例子

注:此例子只是自己在代码中为了读某固定的几个值,写的有点死,所以另作他用的时候请自行修改或扩充 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; namespace MyTool {