Php 如何查询XML文件以显示在HTML表单上搜索的结果
我正在尝试查询我的person.xml,以便通过HTML表单按请求显示结果 基本上,当用户通过lastname或person number搜索某人时,我希望显示这些结果 person.xml文件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>
<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;
}
}
}