将SQL作为输入,我必须查询PostgreSQL数据库并将结果作为XML返回。我用以下代码完成了这个:
<?php
$link = "host=localhost dbname=company user=pgsql password=password";
$connect = pg_connect($link);
$query = "SELECT * FROM customer";
$result = pg_query($connect, $query);
$doc = new DomDocument("1.0");
$root = $doc->createElement('data');
$root = $doc->appendChild($root);
while($row = pg_fetch_assoc($result)){
$node = $doc->createElement('collection');
$node = $root->appendChild($node);
foreach($row as $fieldname => $fieldvalue){
$node->appendChild($doc->createElement($fieldname, $fieldvalue));
}
}
$doc->save("cust.xml");
?>
最后,我将把CSS样式表直接应用于XML文档。我将为每个“集合”节点指定样式信息。但是,可能会有集合的子集合,甚至子集合等等。
(所以:主人,细节,子细节,子细节等)
问题是,我的代码只会为Master,detail,sub-detail生成XML。如何修改我的代码,以便生成的XML始终“捕获”所有级别的数据?
...谢谢
是的,我指的是等级关系。例如,使用我当前的代码,我可以看到“Customer”表的所有字段属性。但是,如果其中一个客户属性是“地址”,并且客户有多个地址,该怎么办?这需要显示为......
<data>
<collection>
<fname>Joe</fname>
<lname>Smith</lname>
<address>
<address A> 123...</address A>
<address B> 234...</address B>
</collection>
</data>
我正在尝试修改我的代码以“接收”地址,尽管属性具有子属性......
答案 0 :(得分:3)
首先,您可以考虑使用可用的内置functions在Postgres中执行xml映射。这样做的两个好处是你的数据抽象功能保持在一起,并且Postgres比php更有效地执行这项任务。如果你必须对xml进行更高级别的修改,那么xslt应该可以解决这个问题。
至于你提到的问题,我不确定你是否指的是表中具有层次关系的数据?