Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何查询XML文件以显示在HTML表单上搜索的结果_Php_Xml_Forms_Simplexml_Domdocument - Fatal编程技术网

Php 如何查询XML文件以显示在HTML表单上搜索的结果

Php 如何查询XML文件以显示在HTML表单上搜索的结果,php,xml,forms,simplexml,domdocument,Php,Xml,Forms,Simplexml,Domdocument,我正在尝试查询我的person.xml,以便通过HTML表单按请求显示结果 基本上,当用户通过lastname或person number搜索某人时,我希望显示这些结果 person.xml文件 <person> <personN number="8"> <personL letter="Y"> <fullname> <firstname>Carl</

我正在尝试查询我的person.xml,以便通过HTML表单按请求显示结果

基本上,当用户通过lastname或person number搜索某人时,我希望显示这些结果

person.xml文件

<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文件

<?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实现这一点。任何帮助都会很好。

如果您倾向于搜索这两个字段中是否有任何一个是可能的输入,您可以将两个查询组合成一个查询。只需使用或在其上

因此,在您的代码中:

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;
        }
    }
}

你需要搜索两者吗?数字和/或姓氏?两者都可以,用户有2个选项可供搜索。非常感谢您的帮助!它适用于姓氏,但不适用于人名。当我通过某人的人号搜索某人时,所有结果都会显示出来。另外,if$persons->length>0{的确切含义是什么?我知道if语句是什么,但这个语句是什么意思?@Miley->length>0的意思是,如果找到了人,我就编辑它,然后再试一次
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;
        }
    }
}