php创建与解析xml

1. 字符串定义


1-1 单引号定义

不能转义内容中的变量等东西。

    $_a = 5;
    //单引号
    $_string1 = 'This is $_a a String';

1-2 双引号定义

可以转义变量、转义字符等。

    $_string2 = "This is $_a a String";

1-3 复杂式

格式复杂,注意定义头后面没有空格;尾巴上顶格,后面没有代码或者注释什么的;中间字符也要整体到顶。

    $_xml = <<<_xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
    <version>1.0</version>
    <info>xml解析测试</info>
    <user>
        <name>飘城Web俱乐部</name>
        <url>http://www.yc60.com</url>
        <author sex="男">李炎恢</author>
    </user>
    <user>
        <name>北风网</name>
        <url>http://www.ibeifeng.com</url>
        <author sex="女">谁谁谁</author>
    </user>
    <user>
        <name>电驴</name>
        <url>http://www.verycd.com</url>
        <author sex="男">姓黄的</author>
    </user>
</root>
_xml;

2. 使用SimpleXML操作XML


2-1 创建SimpleXML对象和生成XML文件

创建SimpleXML对象时要传入XML字符串,然后生成XML文件时指定文件的地址。

    //创建一个simplexml对象,传入xml字符串
    $_sxe = new SimpleXMLElement($_xml);
    //生成xml文件
    $_sxe->asXML('text.xml');

2-2 载入XML文件和测试

使用simple_load_file()函数载入XML文件,再用各种方法测试显示是否载入成功。

    //载入xml文件,simplexml
    $_sxe = simplexml_load_file('text.xml');

    //测试
    // echo $_sxe;//这个是错误的,不能显示成功的
    echo $_sxe->asXML();
    var_dump($_sxe);
    print_r($_sxe);
    Reflection::export(new ReflectionClass($_sxe));//反射

2-3 访问XML

2-3-1访问一级标签的值

同一级下同样的标签只有有多个的时候,把它们看成数组操作,当然也可以进行遍历。

    //载入XML
    $_sxe = simplexml_load_file('text.xml');

    //读一级标签的值,version是标签名
    echo $_sxe->version;
    //如果有多个version标签
    print_r($_sxe->version);
    echo $_sxe->version[0];
    echo $_sxe->version[1];
    echo $_sxe->version[2];
    foreach($_sxe->version as $_v){
        echo '['.$_v.']';
    }

2-3-2 访问二级标签的值

访问二级标签或者后面级别标签的值,要像多维数组遍历的那样,一级一级地往下找过去。

    //如果要访问二级标签,必须一层一层指明
    echo $_sxe->user[2]->name;
    //遍历所有的name值
    foreach($_sxe->user as $_user){
        echo '['.$_user->name.']';
    }

2-3-3 访问标签里面的属性的值

使用simplexml_load_file()里面的attributes()方法,取出标签属性的值。标签属性好像只有一个的样子,所以不用传入参数的啦。

    //输出第二个user的author的性别
    echo $_sxe->user[1]->author->attributes();

2-3-4 使用xpath访问XML节点

看打印出来的$_version数组的样子,可以用$_version[0]或者$_version[0][0]来表示值,不过前者相对于后者来说比较方便和便于理解。

    //使用xpath来获取XML节点操作
    $_sxe = simplexml_load_file('text.xml');

    //获取version的值
    $_version = $_sxe->xpath('/root/version');
    var_dump($_version);
    echo $_version[0];

遍历的时候和上面差不多。二级或者后面级数标签的查看就是路径参数的设置(注意,root前面的“/”不能少啊,不然没有值)。属性值的查看也没有什么变化。

    //遍历
    foreach($_version as $_v){
        echo $_v;
    }
    //进行二级标签
    $_name = $_sxe->xpath('/root/user/name');
    // print_r($_name);
    echo $_name[0];
    //属性查看
    $_author = $_sxe->xpath('/root/user/author');
    echo $_author[1]->attributes();

3. 使用DOMDocument操控XML


3-1 DOMDocument的解析

创建dom对象和载入xml文件。

    //创建dom对象
    $_doc = new DOMDocument();
    //载入xml文件
    $_doc->load('text.xml');

3-2 访问xml

像javascript一样按照名称找标签,item(n)表示第几个标签,nodeValue表示标签的值,length表示这类标签的长度。

    //取第一个version的值,getElementsByTagName就是查找传入的标签
    $_version = $_doc->getElementsByTagName('version');
    //这类标签的长度
    echo $_version->length;
    //item(n)表示第n个标签,以下为第一个version标签的值
    echo $_version->item(0)->nodeValue;
    //标签值遍历
    foreach($_version as $_v){
        echo $_v->nodeValue;
    }

3-3 声明domdocument对象和生成xml

声明domdocument对象时传入版本和编码,生成xml时传入xml文件地址。有点自动化的样子,很准确。

    //声明domdocument对象
    $_doc = new DOMDocument('1.0','utf-8');
    //生成xml
    $_doc->save('bbb.xml');

3-4 xml中标签和值的插入以及标准格式化输出

先后什么的不用介意啊!!

    //使用xml标准化格式输出
    $_doc->formatOutput = true;

    //使用createelement来创建一个标签
    $_root = $_doc->createelement('root');

    //在root标签里添加version标签
    $_version = $_doc->createelement('version');

    //把version标签添加到root标签内
    $_root->appendChild($_version);

    //在version里面填入一个字符串
    $_versionTextNode = $_doc->createTextNode('1.0');

    //将1.0放入version标签
    $_version->appendChild($_versionTextNode);

    //将root主标签添加到xml文件里
    $_doc->appendChild($_root);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值