如何从PHP中的XML数据库结果数组中打印出XML响应?

时间:2015-03-05 16:43:49

标签: php arrays xml database

我有一个查询,它将我的行作为已经生成的XML返回。如果重要,那就是Oracle。当我本地运行查询时,XMLELEMENT函数。

例如,来自Oracle文档:

SELECT XMLELEMENT("Emp",
      XMLATTRIBUTES(e.employee_id AS "ID", e.last_name),
      XMLELEMENT("Dept", e.department_id),
      XMLELEMENT("Salary", e.salary)) AS "Emp Element"
   FROM employees e
   WHERE e.employee_id = 206;

Emp Element
---------------------------------------------------------------
<Emp ID="206" LAST_NAME="Gietz">
  <Dept>110</Dept>
  <Salary>8300</Salary>
</Emp>

如何让PHP返回XML文件,因此我不必执行任何'<' . $row['lastname'] . '>';`类型语句。我不需要这样的东西,因为它都是在我的查询中处理的。

每当我使用print_r()时,它会剥离我的所有节点,并且只给出节点中的值。与foreach中的键值相同。

<Emp ID="206" LAST_NAME="Gietz">
  <Dept>110</Dept>
  <Salary>8300</Salary>
</Emp>

最终剥离了所有xml标签,

110
8300

我的代码是:

$dbh = new PDO('oci:dbname=tnsname,'username','password');
                $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $stmt = $dbh->prepare($sql);
                $stmt->execute();
                $result = $stmt->fetch();
                array_shift($result);

//Create a new DOM document and load XML into its internal XML tree
$xml = new SimpleXMLElement($result[0]);

echo $xml->asXML();
print_r($result);

编辑:结束了这一点,谢谢你。

header('Content-Type: application/xml; charset=utf-8');
echo '<employee>';
foreach ($result as $key=>$value)
{
    echo $result->$key;
}
echo '</employee>';

1 个答案:

答案 0 :(得分:1)

请勿使用print_r()输出简单字符串,使用echoprint()

浏览器不会剥离您的节点,它只是将其呈现为HTML。它忽略未知元素并输出文本节点。检查浏览器中的源视图。

要使浏览器识别XML,请发送内容类型。

header('Content-Type: application/xml; charset=utf-8');
echo $result[0];