Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP编写XML字符串_Php_Xml - Fatal编程技术网

用PHP编写XML字符串

用PHP编写XML字符串,php,xml,Php,Xml,我试图构造一个XML字符串作为HTTP请求的主体传递,但是我有点卡住了。以下是构建字符串的函数: public function build_calendarquery() { $body = '<?xml version="1.0" encoding="utf-8" ?> <C:'.$this->report_type.' xmlns:D="DAV:" xmlns:C="u

我试图构造一个XML字符串作为HTTP请求的主体传递,但是我有点卡住了。以下是构建字符串的函数:

    public function build_calendarquery()
{

    $body = '<?xml version="1.0" encoding="utf-8" ?>
                    <C:'.$this->report_type.' xmlns:D="DAV:"
                    xmlns:C="urn:ietf:params:xml:ns:caldav">
                    <D:prop>
                        <D:getetag/>
                        <C:calendar-data>
                        <C:comp name="VCALENDAR">
                        <C:prop name="VERSION"/>
                        <C:comp name="VEVENT">'; 

        foreach($this->cal_props as $prop)
        {
            $body .= '<C:prop name="'.strtoupper($prop).'" />';                                                                
        }

        $body .= '</C:comp>';

        $body .= '<C:comp name="VTIMEZONE" />
                    </C:comp>
                        </C:calendar-data>
                        </D:prop>';

        if($this->filters){

            $body .= '<C:filter>
                        <C:comp-filter name="VCALENDAR">
                            <C:comp-filter name="VEVENT">';

            foreach($this->filters as $filter=>$val) 
            {
                $body .= '<C:'.$filter.' '.$val.'/>';
            }

            $body .= '</C:comp-filter>
                        </C:comp-filter>
                            </C:filter>';
        }

        $body .= '</C:calendar-query>'; 

        return $body;
}
它返回NULL


我以前从未真正使用过XML。我是否遗漏了一些非常明显的东西?

var\u dump在函数上不起作用。尝试将函数结果存储在变量中,然后将其转储:

$result = $this->build_calendarquery();
var_dump($result);

另外,我不知道PHP是否喜欢将单引号字符串跨越多行…

所以我在本地测试了您的代码,您提供的部分没有问题

<?php
class Test
{
    public $report_type="foo";
    public $cal_props = array();
    public $filters = array();
    public function build_calendarquery()
    {

        $body = '<?xml version="1.0" encoding="utf-8" ?>
                        <C:'.$this->report_type.' xmlns:D="DAV:"
                        xmlns:C="urn:ietf:params:xml:ns:caldav">
                        <D:prop>
                            <D:getetag/>
                            <C:calendar-data>
                            <C:comp name="VCALENDAR">
                            <C:prop name="VERSION"/>
                            <C:comp name="VEVENT">'; 

            foreach($this->cal_props as $prop)
            {
                $body .= '<C:prop name="'.strtoupper($prop).'" />';                                                                
            }

            $body .= '</C:comp>';

            $body .= '<C:comp name="VTIMEZONE" />
                        </C:comp>
                            </C:calendar-data>
                            </D:prop>';

            if($this->filters){

                $body .= '<C:filter>
                            <C:comp-filter name="VCALENDAR">
                                <C:comp-filter name="VEVENT">';

                foreach($this->filters as $filter=>$val) 
                {
                    $body .= '<C:'.$filter.' '.$val.'/>';
                }

                $body .= '</C:comp-filter>
                            </C:comp-filter>
                                </C:filter>';
            }

            $body .= '</C:calendar-query>'; 

            return $body;
    }
    public function doVarDump()
    {
        var_dump($this->build_calendarquery());
    }
}

$test = new Test();
var_dump($test->build_calendarquery());
$test->doVarDump();
?>
$val)
{
$body.='';
}
$body.='
';
}
$body.='';
返回$body;
}
公共函数doVarDump()
{
var_dump($this->build_calendarquery());
}
}
$test=新测试();
var_dump($test->build_calendarquery());
$test->doVarDump();
?>
产出:

string '<?xml version="1.0" encoding="utf-8" ?>
                        <C:foo xmlns:D="DAV:"
                        xmlns:C="urn:ietf:params:xml:ns:caldav">
                        <D:prop>
                            <D:getetag/>
                            <C:calendar-data>
                            <C:comp name="VCALENDAR">
                            <C:prop name="VERSION"/>
                            <C:comp name="VEVENT"></C:comp><C:comp name="VTIMEZONE" />
                        </C:comp>
                            </C:calendar-data>
                            </D:prop></C:calendar-query>' (length=383)
string '<?xml version="1.0" encoding="utf-8" ?>
                        <C:foo xmlns:D="DAV:"
                        xmlns:C="urn:ietf:params:xml:ns:caldav">
                        <D:prop>
                            <D:getetag/>
                            <C:calendar-data>
                            <C:comp name="VCALENDAR">
                            <C:prop name="VERSION"/>
                            <C:comp name="VEVENT"></C:comp><C:comp name="VTIMEZONE" />
                        </C:comp>
                            </C:calendar-data>
                            </D:prop></C:calendar-query>' (length=383)
string'
'(长度=383)
字符串'
'(长度=383)

您需要向我们展示更多的代码。我对您的
var_转储($this->build_calendarquery())的位置感兴趣语句已定位。

使用类或尝试删除函数对公共的声明,并检查所有变量,如($this->report\u type,$this->cal\u props…等)

我对$this->calu道具有疑问

我尝试您的代码如下
注意:-删除所有$this变量

function build_calendarquery()
{

$body=
'; 
$body.='';
$body.='
';
$body.='
';
$body.='
';
$body.='';
返回$body;
} var_dump(build_calendarquery())

输出为string(792)”

我不知道该方法如何返回
null
,因为在
$body
中至少有
'
返回$body之前。您是否发现了任何类型的错误或异常?
$this->report\u type
中有什么内容?您不可能调用
var\u dump($this->[…])在对象方法之外,是吗<代码>$this
仅在对象的方法中有效。我知道我正在生成字符串ok,因为我可以将其发送到浏览器并读取它,然后再将其作为变量返回。将单引号文本跨越多行是可以的。谢谢。我不知道var_dump的事。不管怎样,我还是先把东西存储在变量中——我只是在保存问题的输入!据我所知,PHP忽略了空格,所以这不应该是一个问题。别听他的。你可以
var\u dump
任何你想要的东西。非常感谢你的帮助,但是我意识到我太愚蠢了,没有正确地将字符串沿着方法跟踪传递。现在都修好了。我应该删除这个问题吗?
function build_calendarquery()
$body = '<?xml version="1.0" encoding="utf-8" ?>
                <C: xmlns:D="DAV:"
                xmlns:C="urn:ietf:params:xml:ns:caldav">
                <D:prop>
                    <D:getetag/>
                    <C:calendar-data>
                    <C:comp name="VCALENDAR">
                    <C:prop name="VERSION"/>
                    <C:comp name="VEVENT">'; 



    $body .= '</C:comp>';

    $body .= '<C:comp name="VTIMEZONE" />
                </C:comp>
                    </C:calendar-data>
                    </D:prop>';



        $body .= '<C:filter>
                    <C:comp-filter name="VCALENDAR">
                        <C:comp-filter name="VEVENT">';



        $body .= '</C:comp-filter>
                    </C:comp-filter>
                        </C:filter>';


    $body .= '</C:calendar-query>'; 

    return $body;