• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

xml auslesen & array vergleichen

ProblemUser

Mitglied
Hallo, ich habe 2 *.xml Dateien, welche im Grunde gleich aufgebaut sind:
Code:
<kunden>
<id>11</id>
<id>16</id>
<id>125</id>
<id>198</id>
<id>199</id>
</kunden>
Der Unterschiet besteht in den IDs!
Nun habe ich mir gedacht mit SimpleXML kann ich sie auslesen:

PHP:
<?php
    $filename = 'ausgang.xml';
 $xml = simplexml_load_file($filename);
            foreach($xml->kunden as $kunden)
            echo $kunden->id 
?>
Jedoch wird mir nichts angezeigt!
Was ich eig machen möchte: Ich möchte beide Dateien auslesen, vergleichen ob in in Datei1 ids aus Datei2 enthalten sind und umgekehrt!

Wie ich den vergleich scripte weiß ich auch nicht (bin noch recht neu in PHP)
 
Zuletzt bearbeitet:
Werbung:
Es geht auch mit SimpleXML, aber ich bin kein Fan davon.

PHP:
<?php

$xmlData1 = <<<EOT
<kunden>
    <id>11</id>
    <id>16</id>
    <id>125</id>
    <id>198</id>
    <id>199</id>
</kunden>
EOT;

$xmlData2 = <<<EOT
<kunden>
    <id>14</id>
    <id>16</id>
    <id>129</id>
    <id>202</id>
    <id>199</id>
</kunden>
EOT;

function extractIds($xmlCode)
{
    $xmldoc = new DOMDocument();
    $xmldoc->loadXML($xmlCode);
    $xpath = new DOMXPath($xmldoc);

    $ret = array();

    foreach ($xpath->query('//kunden/id') as $node) {
        $ret[] = (int) $node->nodeValue;
    }

    return $ret;
}

$ids1 = extractIds($xmlData1);
$ids2 = extractIds($xmlData2);

$commonIds = array_intersect($ids1, $ids2);
sort($commonIds);

var_dump($commonIds);

Code:
array(2) {
  [0]=>
  int(16)
  [1]=>
  int(199)
}
 
Warning: DOMDocument::loadXML() [domdocument.loadxml]: Start tag expected, '<' not found in Entity, line: 1 in www\htdocs\tests\index.php on line 8

Warning: DOMDocument::loadXML() [domdocument.loadxml]: Start tag expected, '<' not found in Entity, line: 1 in www\htdocs\tests\index.php on line 8
array(0) { }
ich habe nur die Dateien geändert! Wenn ich die xml wie bei dir einfüge, kommt das heraus:
PHP:
array(2) {   [0]=>   int(16)   [1]=>   int(199) }
 
Werbung:
Lass mich raten, du rufst die Funktion mit einem Dateinamen auf und wunderst dich, dass das nicht klappt, wo sie doch einen XML-String erwartet? ;)

PHP:
<?php

function extractIds($xmlFile)
{
    $xmldoc = new DOMDocument();
    $xmldoc->load($xmlFile);
    $xpath = new DOMXPath($xmldoc);

    $ret = array();

    foreach ($xpath->query('//kunden/id') as $node) {
        $ret[] = (int) $node->nodeValue;
    }

    return $ret;
}

$ids1 = extractIds('./test.xml');
$ids2 = extractIds('./test2.xml');

$commonIds = array_intersect($ids1, $ids2);
sort($commonIds);

var_dump($commonIds);
 
Werbung:
Also nun wird zumindest mal eine ID ausgegeben.
Kannst du mir erklären was du da überhaupt gescriptet hast? Ich will ja nicht einfach copy&pasten von Sachen, von denen ich keine Ahnung hab.
 
Zurück
Oben