在PHP中使用python脚本解析XML

时间:2017-01-29 07:55:59

标签: php python xml

我在php中使用python脚本从c#服务器调用一些xml日期。当我通过simplexml_load_string传递它来解析我的数据时。 python脚本被调用了几个不同的东西,但是对于其中一个调用它给了我

  

警告:simplexml_load_string():实体:第1行:解析器错误:StartTag:无效的元素名称

我的PHP是:

$output = exec("python Auth.py -M authenticate -p 17df30b0-37c1-4ebf-b45e-39353bd971a9 -P 5b9abe609e1ab31555562dd959fc050d");
$xml = simplexml_load_string($output, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

我的Python是:

params = urllib.urlencode(data);
conn = httplib.HTTPConnection("localhost", 8003);
conn.request("POST", path, params)
response = conn.getresponse()
print response.read();

我的XML是:

<?xml version="1.0"?>
<ServerResponse>
  <Result>Success</Result>
  <Token>25027fc3-e3c9-46a8-a1b7-5d217fecfe2c</Token>
</ServerResponse>

我可以从我的Ubuntu命令行运行我的Python脚本,并将输出作为XML数据写入PHP文件,并且在解析它时工作正常。

所以我不知道出了什么问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

在将exec()分配给变量时,您只捕获Python打印的最后一行。最后一行不足以使用simplexml_load_string创建 SimpleXMLElement

相反,使用PHP exec()的附加输出 return_var 参数将输出流传递到数组中。收到$output数组后,遍历它以构建XML字符串:

exec("python Auth.py -M authenticate -p 17df30b0-37c1-4ebf-b45e-39353bd971a9" .
     " -P 5b9abe609e1ab31555562dd959fc050d", $output, $return_var);

$strXML = '';    
foreach ($output as $line) {
    $strXML = $strXML . $line;
}

$xml = simplexml_load_string($strXML, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);