Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP构建XML的问题_Php_Xml - Fatal编程技术网

使用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

目前,我正在用PHP构建一个XML文档,它将产生以下结果:

<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与此相矛盾——将其作为兄弟姐妹,这就是我想要的。谢谢我不确定如何从查询结果中“拉出”区域,但您的方法是可行的。谢谢谢谢你的帮助,我发布了一个修订版作为我原始帖子的编辑。谢谢你的帮助,我发布了一个修订版作为我原始帖子的编辑。