Я хочу создать XML-данные с атрибутами в codeigniter

#arrays #xml #codeigniter

#массивы #xml #codeigniter

Вопрос:

Я хочу создать XML-данные с атрибутом, используя PHP array в codeigniter (я использую Google map, и для этого мне нужно создать xml-данные, но в формате атрибута, и я получаю данные в формате xml tag, я создаю xml из моего PHP array, который я создаю из базы данных, используя MySqli)

Я пробовал это.

 public function display_xml()
{

      $this->load->dbutil();

      $data = $this->db->query('select * from markers');

      $config = array (
      'root'    => 'markers',
          'element' => 'marker',
          'newline' => "n",
          'tab'     => "t"
      );
      $xml = $this->dbutil->xml_from_result($data, $config);
      $this->output->set_content_type('text/xml');
      $this->output->set_output($xml); 
}
  

Я получаю этот вывод..

 <markers>
    <marker>
        <id>1</id>
        <name>Love.Fish</name>
        <address>580 Darling Street, Rozelle, NSW</address>
        <lat>-33.861034</lat>
        <lng>151.171936</lng>
        <type>restaurant</type>
    </marker>
    <marker>
        <id>2</id>
        <name>Young Henrys</name>
        <address>76 Wilford Street, Newtown, NSW</address>
        <lat>-33.898113</lat>
        <lng>151.174469</lng>
        <type>bar</type>
    </marker>
</markers>
  

Я хочу этот вывод

 <markers>
    <marker id="1" name="Billy Kwong" address="1/28 Macleay Street, Elizabeth Bay, NSW" lat="-33.869843" lng="-151.225769" type="restaurant"/>
    <marker id="2" name="Love.Fish" address="580 Darling Street, Rozelle, NSW" lat="-33.861034" lng="151.171936" type="restaurant"/>
</markers>
  

Ответ №1:

Здесь нам нужно использовать createAttribute.

 public function display_xml()
    {
        $this->load->dbutil();
        $data = $this->db->query('select * from markers');

        $markers_data = $data->result_array();

        $this->output->set_content_type('text/xml');

        $dom = new DOMDocument("1.0");

        // create root element
        $root = $dom->createElement("markers");
        $dom->appendChild($root);

        foreach ($markers_data as $value) 
        {
            // create child element
            $marker = $dom->createElement("marker");
            $root->appendChild($marker);

            // create attribute node
            $id = $dom->createAttribute("id");
            $marker->appendChild($id);

            // create attribute value node
            $priceValue = $dom->createTextNode($value['id']);
            $id->appendChild($priceValue);

            // create attribute node
            $name = $dom->createAttribute("name");
            $marker->appendChild($name);

            // create attribute value node
            $nameValue = $dom->createTextNode($value['name']);
            $name->appendChild($nameValue);

            // create attribute node
            $address = $dom->createAttribute("address");
            $marker->appendChild($address);

            // create attribute value node
            $addressValue = $dom->createTextNode($value['address']);
            $address->appendChild($addressValue);

            // create attribute node
            $lat = $dom->createAttribute("lat");
            $marker->appendChild($lat);

            // create attribute value node
            $latValue = $dom->createTextNode($value['lat']);
            $lat->appendChild($latValue);

            // create attribute node
            $lng = $dom->createAttribute("lng");
            $marker->appendChild($lng);

            // create attribute value node
            $lngValue = $dom->createTextNode($value['lng']);
            $lng->appendChild($lngValue);

            // create attribute node
            $type = $dom->createAttribute("type");
            $marker->appendChild($type);

            // create attribute value node
            $typeValue = $dom->createTextNode($value['type']);
            $type->appendChild($typeValue);
        }

        // save and display tree
        echo $dom->saveXML();
    }