天天看点

php创建与解析xml1. 字符串定义2. 使用SimpleXML操作XML3. 使用DOMDocument操控XML

1. 字符串定义

1-1 单引号定义

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

$_a = ;
    //单引号
    $_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[];
    echo $_sxe->version[];
    echo $_sxe->version[];
    foreach($_sxe->version as $_v){
        echo '['.$_v.']';
    }
           

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

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

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

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

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

//输出第二个user的author的性别
    echo $_sxe->user[]->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[];
           

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

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