使用PHP构建XML的问题
目前,我正在用PHP构建一个XML文档,它将产生以下结果:使用PHP构建XML的问题,php,xml,Php,Xml,目前,我正在用PHP构建一个XML文档,它将产生以下结果: <root> <collection> <region>1</region> <primary>John</primary> <collection> <collection> <region>1</region> <primary>Jane</primar
<root>
<collection>
<region>1</region>
<primary>John</primary>
<collection>
<collection>
<region>1</region>
<primary>Jane</primary>
<collection>
<collection>
<region>2</region>
<primary>Jill</primary>
<collection>
<root>
<root>
<collection>
<region>1</region>
<primary>John</primary>
<primary>Jane</primary>
<collection>
<collection>
<region>2</region>
<primary>Jill</primary>
<collection>
<root>
我是否可以修改PHP,将“primary”作为“region”的子级
谢谢
对不起,伙计们,我是说作为一个兄弟姐妹。你说得对,收集标签会变得多余。根据您的意见,我认为结构应改为:
<root>
<collection>
<region ID = "1">
<primary>John</primary>
<primary>Jane</primary>
</region>
<region ID = "2">
<primary>Jill</primary>
</collection>
<root>
约翰
简
吉尔
那么,我的问题是,如何将作为父级的区域与查询返回的MySQL资源隔离开来
谢谢。我想你想要的是:
<?php
$query = mysql_query("SELECT * FROM eventcal WHERE eventDate = '$date' ORDER BY region");
$doc = new DomDocument("1.0");
$root = $doc->createElement('data');
$root = $doc->appendChild($root);
$currentRegionId = -1;
$currentRegionNode = null;
if (@mysql_num_rows($query)) {
while ($row=@mysql_fetch_assoc($query)) {
if ($row['region'] != $currentRegionId)
{
$currentRegionId = $row['region'];
$node = $doc->createElement('collection');
$node = $root->appendChild($node);
$currentRegionNode = $doc->createElement('region');
$currentRegionNode->setAttribute('id', $row['region']);
$node->appendChild($currentRegionNode);
}
foreach($row as $fieldname => $fieldvalue){
if ($fieldname != 'region')
$currentRegionNode->appendChild($doc->createElement($fieldname, $fieldvalue));
}
}
}
?>
我想你想要的是:
<?php
$query = mysql_query("SELECT * FROM eventcal WHERE eventDate = '$date' ORDER BY region");
$doc = new DomDocument("1.0");
$root = $doc->createElement('data');
$root = $doc->appendChild($root);
$currentRegionId = -1;
$currentRegionNode = null;
if (@mysql_num_rows($query)) {
while ($row=@mysql_fetch_assoc($query)) {
if ($row['region'] != $currentRegionId)
{
$currentRegionId = $row['region'];
$node = $doc->createElement('collection');
$node = $root->appendChild($node);
$currentRegionNode = $doc->createElement('region');
$currentRegionNode->setAttribute('id', $row['region']);
$node->appendChild($currentRegionNode);
}
foreach($row as $fieldname => $fieldvalue){
if ($fieldname != 'region')
$currentRegionNode->appendChild($doc->createElement($fieldname, $fieldvalue));
}
}
}
?>
首先需要更好地理解XML本身。您希望region是一个包含主要元素的复杂类型,因此可能需要引入一个新元素或属性来保存regions ID。例如,您可能希望XML显示如下:-
<root>
<collection>
<region ID="1">
<primary>John</primary>
<primary>Jane</primary>
</region>
</collection>
<collection>
<region ID="2">
<primary>Jill</primary>
</region>
</collection>
</root>
约翰
简
吉尔
请注意,由于集合元素只包含一个region元素,因此它目前已成为超级元素。在编写更多代码之前,继续改进实际的XML结构是很重要的。首先需要更好地理解XML本身。您希望region是一个包含主要元素的复杂类型,因此可能需要引入一个新元素或属性来保存regions ID。例如,您可能希望XML显示如下:-
<root>
<collection>
<region ID="1">
<primary>John</primary>
<primary>Jane</primary>
</region>
</collection>
<collection>
<region ID="2">
<primary>Jill</primary>
</region>
</collection>
</root>
约翰
简
吉尔
请注意,由于集合元素只包含一个region元素,因此它目前已成为超级元素。重要的是,在编写更多代码之前,您必须继续改进实际的XML结构。第二个示例中的XML与您解释的内容(或缩进方式)不匹配第二个示例中的XML与您解释的内容(或缩进方式)不匹配区域ID在XML中的最终位置是什么?你会说这是一个好地方吗?目前没有任何地方-我想我会在等待问题被纠正的时候把这个放进去。。。。。。问题是“primary作为区域的子对象”,但示例xml与此相矛盾——将其作为兄弟姐妹,这就是我想要的。谢谢我不确定如何从查询结果中“拉出”区域,但您的方法是可行的。谢谢区域ID在XML中的最终位置是什么?你会说这是一个好地方吗?目前没有任何地方-我想我会在等待问题被纠正的时候把这个放进去。。。。。。问题是“primary作为区域的子对象”,但示例xml与此相矛盾——将其作为兄弟姐妹,这就是我想要的。谢谢我不确定如何从查询结果中“拉出”区域,但您的方法是可行的。谢谢谢谢你的帮助,我发布了一个修订版作为我原始帖子的编辑。谢谢你的帮助,我发布了一个修订版作为我原始帖子的编辑。