XML array output to plain XML

I have a script that collects 4 URLs (XML) using CURL and returns an array with 4 elements, each of which receives the URL results.

Here is the array:

array(3) {
  [0]=>
  string(41772) "<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
<status>
  <created_at>Tue Mar 30 20:58:53 +0000 2010</created_at>
  <id>11328253513</id>
  <text>...</text>
  <source...</source>
  <truncated>false</truncated>
  <in_reply_to_status_id></in_reply_to_status_id>
  <in_reply_to_user_id></in_reply_to_user_id>
  <favorited>true</favorited>
  <in_reply_to_screen_name></in_reply_to_screen_name>
  <user>
    <id>1...</id>
    <name>....</name>
</status>
</statuses>
"
  [1]=>
  string(20630) "<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
<status>
  <created_at>Sun Feb 28 14:12:30 +0000 2010</created_at>
  <id>...</id>
  <text>...</text>
  <source>&lt;a

etc...

How can I easily infer XML from an array? I also need to combine 3 XML structures into one, where it <statuses>starts and ends between each array.

+2
source share
2 answers

For a simple merge like this, you can also simply:

$xml = implode('', $theArray); 
$xml = str_replace(array('<?xml version="1.0" encoding="UTF-8"?>',
                         '<statuses type="array">',
                         '</statuses>'), '', $xml); 

$xml = '<?xml version="1.0" encoding="UTF-8"?>'
     . '<statuses type="array">'
     . $xml
     . '</statuses>';

: , , , - XML , XML- , . XML, . node . .

DOM, DOM , DOM , , . DOM, CURL, Pascal, loadXml().

, Regex. .

+1

:

  • $destination DOMDocument
    • <statuses> node
  • XML:
    • DOMDocument: $currentDocument
    • <status> node, $currentDocument->getElementsByTagName
    • <status> node, $destination, $destination->importNode
  • XML , $destination , , , $destination->saveXML


, , :

-, XML - , , :

$strings = array(
  '<?xml version="1.0" encoding="UTF-8"?>
    <statuses type="array"><status>
      <id>ID 1</id>
    </status></statuses>',
  '<?xml version="1.0" encoding="UTF-8"?>
    <statuses type="array"><status>
      <id>ID 2</id>
    </status></statuses>',
  '<?xml version="1.0" encoding="UTF-8"?>
    <statuses type="array"><status>
      <id>ID 3</id>
    </status></statuses>',
);


<statuses>:

$destination = new DOMDocument();
$destination->formatOutput = true;
$destinationStatuses = $destination->createElement('statuses');
$destination->appendChild($destinationStatuses);


XML:

foreach ($strings as $str) {
  $current = new DOMDocument();
  $current->loadXML($str);
  $currentStatuses = $current->getElementsByTagName('status');
  foreach ($currentStatuses as $currentStatus) {
    $destinationStatus = $destination->importNode($currentStatus, true);
    $destinationStatuses->appendChild($destinationStatus);
  }
}


:

  • DOMDocument
  • <status>
  • <status>
  • <statuses>


, , :

echo '<pre>' . htmlspecialchars($destination->saveXML()) . '</pre>';


:

<?xml version="1.0"?>
<statuses>
  <status>
      <id>ID 1</id>
    </status>
  <status>
      <id>ID 2</id>
    </status>
  <status>
      <id>ID 3</id>
    </status>
</statuses>

. <status> XML-; -)

+2

Source: https://habr.com/ru/post/1739347/


All Articles