Как запросить XML-файл для отображения результатов поиска в форме HTML - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь запросить мой person.xml, чтобы отобразить результаты в соответствии с запросом через HTML-форму.

Обычно, когда пользователь ищет кого-то по фамилии или номеру, я хочу, чтобы эти результаты отображались.

person.xml file

<person>
    <personN number="8">
        <personL letter="Y">
            <fullname>
                <firstname>Carl</firstname>
                <lastname>Steel</lastname>
            </fullname>
            <appearance>
                <eye>brown</eye>
            </appearance>
        </personL>  
    </personN>
  <personN number="9">
        <personL letter="Z">
            <fullname>
                <firstname>Paul</firstname>
                <lastname>Steel</lastname>
            </fullname>
            <appearance>
                <eye>blue</eye>
            </appearance>
        </personL>  
    </personN>
</person>

update.php file

<?php

$xmlDocument=new DOMDocument;
$xmlDocument->preserveWhiteSpace=false;
$xmlDocument->load("person.xml");
$personXPath = new DOMXPath($xmlDocument);



if(isset($_GET["submit"])) {

$lastN=($_GET["lastname"]);
$number=($_GET["number"]);

$lastname=$personXPath ->query("/person/personN/personL/fullname/lastname/text()='$lastN'");
foreach($lastname as $lm) {
echo $lastN->textContent;
}

$number=$personXPath ->query("/person/personN[@number='$number']");
foreach($number as $nu) {
echo $nu->textContent;
}

}


?>
<html>

<head>

</head>

<body>

    <h2>Update Information</h2>

    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="GET">

    Person Number
    <input type="number" name="number">

    Last Name
    <input type="text" name="lastname">

    <button type="submit" name="submit">Search</button>

    </form>


</body>

</html>

В данный момент мой код не отображает никаких результатов, и я не получаю никаких ошибок. Я не уверен, что он делает, но, похоже, ничего не делает. Я хочу добиться этого через DOMDocument / XPath или SimpleXML (если я могу). Любая помощь будет великолепна.

1 Ответ

1 голос
/ 11 октября 2019

Если вы склоняетесь к поиску, если какое-либо из этих двух полей является возможным вводом, вы можете объединить оба запроса в один. Просто используйте or на нем.

//personN[@number='{$number}' or ./personL/fullname/lastname[contains(text(), '{$lastN}')]]

Так в вашем коде:

if (isset($_GET["submit"])) {
    $query = [];
    if (!empty($_GET['number'])) {
        $number = $_GET["number"];
        $query[] = "@number='{$number}'";
    }
    if (!empty($_GET['lastname'])) {
        $lastN = $_GET['lastname'];
        $query[] = "./personL/fullname/lastname[contains(text(), '{$lastN}')]";
    }
    $query = '//personN[' . implode(' or ', $query) . ']';

    $persons = $personXPath->query($query);
    if ($persons->length > 0) {
        foreach ($persons as $person) {
            $firstname = $personXPath->evaluate('string(./personL/fullname/firstname/text())', $person);
            $lastname = $personXPath->evaluate('string(./personL/fullname/lastname/text())', $person);
            $eye_color = $personXPath->evaluate('string(./personL/appearance/eye/text())', $person);
            echo $eye_color;
        }
    }
}
...