zoukankan      html  css  js  c++  java
  • PHP读取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的相关文章

    怎么样?的确很简单吧! 

  • 相关阅读:
    idea使用配置lombok插件
    微服务框架搭建总结点(一):Springboot整合log4j2日志
    git使用笔记:git commit后,如何撤销commit
    SQL Server中char,varchar,nchar, nvarchar的区别
    SQL插入语句插入自增的主键后,如何获取这个新增的主键值
    Linq分组后,再对分组后的每组进行内部排序,获取每组中的第一条记录
    Flutter 笔记
    gch
    JVM内存观察
    mybatis for 循环 中oracle in 条件后 多余1000条处理
  • 原文地址:https://www.cnblogs.com/shangbolei/p/4402591.html
Copyright © 2011-2022 走看看