天天看點

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);