我正在尝试构建一个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;
}
我遇到的问题是,当我尝试使用从此函数返回的数据时,似乎没有任何东西。我的意思是,如果我写:
var_dump($this->build_calendarquery());
返回NULL。
我之前从未真正使用过XML。我错过了一些非常明显的东西吗?
答案 0 :(得分:1)
所以我在本地测试了你的代码,你提供的部分没有任何问题。
<?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();
?>
输出:
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)
您需要向我们展示更多代码。我对你的var_dump($this->build_calendarquery());
声明的位置感兴趣。
答案 1 :(得分:0)
使用类或尝试将函数声明移除到public并检查所有变量,如($ this-&gt; report_type,$ this-&gt; cal_props ... etc)... etc
我怀疑$ this-&gt; cal_props
我尝试下面的代码
注意: - 删除所有$ this变量
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;
}
的var_dump(build_calendarquery());
输出为字符串(792)“”
答案 2 :(得分:-2)
var_dump不适用于函数。尝试将函数的结果存储在变量中,然后var_dump:
$result = $this->build_calendarquery();
var_dump($result);
另外,我不知道当你跨越多行的单引号字符串时PHP是否喜欢它...