用PHP编写XML字符串
我试图构造一个XML字符串作为HTTP请求的主体传递,但是我有点卡住了。以下是构建字符串的函数:用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
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;