网站首页php

PHP操作xml实例

发布时间:2022-01-06 03:37:06编辑:阅读(1816)

    1. 读入xml内容, 如:


    $template = <<<EOF
    <Header>
        <EInvoiceTag></EInvoiceTag>
        <EInvoiceID></EInvoiceID>
        <Version></Version>
    </Header>
    <EInvoiceData>
        <Main>
        <EInvoiceName></EInvoiceName>
        <EInvoiceCode></EInvoiceCode>
        <EInvoiceNumber></EInvoiceNumber>
        </Main>
    </EInvoiceData>
    EOF;

    使用simplexml_load_string读入xml内容, 若最外层无根点节元素, 需手动添加    


        $template = '<xml>' . $template  . '</xml>';
        $templateObj = simplexml_load_string($template);


    2. 如此, 就得到xml内容的对象了, 可直接赋值操作:

            $templateObj->Header->EInvoiceTag = 'CZEI50';
            $templateObj->Header->EInvoiceID  = '1239612200-02106014';
            $templateObj->Header->Version     = '1.3.1';
            $templateObj->EInvoiceData->Main->EInvoiceName     = '1.1.2';
            $templateObj->EInvoiceData->Main->EInvoiceCode     = '31160120';
            $templateObj->EInvoiceData->Main->EInvoiceNumber   = '0002269321';


    3. 再将对象转换成数组

    function object2array($obj) {
        $obj = (array)$obj;
        foreach ($obj as $k => $v) {
            if (gettype($v) == 'resource') {
                return;
            }
            if (gettype($v) == 'object' || gettype($v) == 'array') {
                $obj[$k] = (array)object2array($v);
            }
        }
        return $obj;
    }
    
    $templateArr = object2array($templateObj);

    4. 再将数组转换成xml

    function array2xml($data, $root = true)
    {
    	$str = "";
    	if ($root) {
    		$str .= "<xml>";
    	}
    	foreach ($data as $key => $val) {
    				
    		if (is_array($val)) {
    			$child = array2xml($val, false);
    			$str .= "<$key>{$child}</$key>";
    		} else {
    			$str .= "<$key>{$val}</$key>";
    		}
    	}
    	if ($root) {
    		$str .= "</xml>";
    	}
    	return $str;
    }
    
    $xmlContent = array2xml($templateArr, false);
    echo $xmlContent;


    最终输出结果:

    <Header>
        <EInvoiceTag>CZEI50</EInvoiceTag>
        <EInvoiceID>1239612200-02106014</EInvoiceID>
        <Version>1.3.1</Version>
    </Header>
    <EInvoiceData>
        <Main><EInvoiceName>1.1.2</EInvoiceName>
        <EInvoiceCode>31160120</EInvoiceCode>
        <EInvoiceNumber>0002269321</EInvoiceNumber>
        </Main>
    </EInvoiceData>



评论