In xml suchen.

rernanded

Erfahrenes Mitglied
Hallo

tue mich schwer mit einer Suche in xml per php.

Hier die Code-Zeilen die ich von einem Kollegen bekam und womit ich nicht ganz klar komme:

PHP:
<form action="search.php" method="post">
<input type="text" name="search">
<input type="submit" value="los">
</form>

<?php
error_reporting(-1);
ini_set('display_errors', true);

$search = $_POST['search'];

echo "SUCHWERT = ".$search."<br /><br /><br />";

    $xml = simplexml_load_file('form.xml');

//$submit = $xml->xpath("/form/submit[gender='$search']");

//$submit = $xml->xpath(sprintf('/form/submit[gender="%s"]', $search));

$submit = $xml->xpath("/form/submit[contains(gender, '$search')]");

 
    foreach($submit as $submit) {
    echo $submit->timestamp."<br />";
    echo $submit->gender."<br />";
    echo $submit->name."<br />";
    echo $submit->email."<br />";
    echo $submit->message."<br />";
    }

    echo "<br /><hr></hr>";

?>
Struktur der xml:
<form>
<submit>
<timestamp>2024-10-10 11:22:33</timestamp>
<gender>m</gender>
<name>123</name>
<email>mail@blablabla.de</email>
<message>000111222333 www vvv aaa</message>
</submit>
</form>

Wie kann ich a) in gender, name, email und message gleichzeitig suchen und b) mit einem bis mehreren Suchworten?

MONI
 
Zuletzt bearbeitet:
Guten Morgen Moni,
Wie kann ich a) in gender, name, email und message gleichzeitig suchen und b) mit einem bis mehreren Suchworten?
Erst Mal zum Verständnis:
Mehrere Suchworte - Du hast doch nur ein Eingabefeld für den Suchbegriff? Wo sollen die Worte her kommen?
 
Zur Suche in XML finde ich dies:
Use XPath with PHP's SimpleXML to find nodes containing a String

Und dies funktioniert auch auf Anhieb und findet den Suchbegriff in allen Elementen:
Code:
$matches = $xml->xpath("//*[text()[contains(., '{$search}')]]");
Du willst jedoch nicht in allen Elementen suchen, sondern nur in gender, name, email und message. Dazu habe ich diese Namen in ein Array geschrieben und mit den Elementen gesucht:
Code:
    $nodeNames = ['gender', 'name', 'email', 'message'];
    foreach ($nodeNames as $name) {
        $match = $xml->xpath("//{$name}[text()[contains(., '{$search}')]]");
        var_dump($match);
    }
 

Neue Beiträge

Zurück