синтаксический анализ php и xml с помощью поиска

#php #xml #forms #xpath #xml-parsing

#php #xml #формы #xpath #синтаксический анализ xml

Вопрос:

это мой XML-файл и мой php-код. я хочу выполнить поиск по имени через текстовое поле в моей форме php, и я хочу отобразить всю информацию о конкретном студенте, но проблема в том, что мой xpath не работает. любая помощь с xpath.

 <students>
<student>
        <firstname>John</firstname>
        <lasttname>Snow</lasttname>
        <student_id>160600</student_id>
        <gender>male</gender>
        <dob>23-06-95</dob>
        <age>21</age>
        <email>JohnSnow@gmail.com</email>
        <mobilenumber>57675060</mobilenumber>
        <address>Winter Fel</address>
        <cohort>BSE15PT</cohort>
        <programme>Software Engineering</programme>
        <mode>PT</mode>
    </student> 
    <student>
        <firstname>meryl</firstname>
        <lastname>Burton</lastname>
        <student_id>150500</student_id>
        <gender>female</gender>
        <dob>26-07-95</dob>
        <email>mirena@gmail.com</email>
        <mobilenumber>57800603</mobilenumber>
        <address>rose hill</address>
        <cohort>BSE15AFT</cohort>
        <programme>software engineering</programme>
        <mode>ft</mode>
    </student>
</students>  


<?php
    if(isset($_POST['search']))
    {
        $xml=simplexml_load_file("studentInstance.xml") or die("Error: Cannot Create Object");
        $xpath = $xml;
        //query the document
        $name = $_POST['studentname'];

    $query = $xpath->query("/students/student/[firstname = '$name']");
        echo $query;
    }

    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <title>Searching</title>
        </head>
        <body>
        <form method="POST" action="searchRecord.php">
            <label>Enter Student Name</label>
             <input type="text" name="studentname"><br>
            <input type="submit" name="search" value="search">
            </form>
        </body>
    </html>
  

Комментарии:

1. Я не уверен, и я нахожусь в мобильном телефоне, но student — это список, я думаю, может быть, вам нужен определенный индекс / students / student[1]/firstname

Ответ №1:

Удалите последнюю косую черту вашего запроса.
Изменение от этого:

 "/students/student/[firstname = '$name']"
  

к этому:

 "/students/student[firstname = '$name']"
  

РАБОЧИЙ ПРИМЕР:

 <?php

$xml = <<< EOF
<students>
<student>
        <firstname>John</firstname>
        <lasttname>Snow</lasttname>
        <student_id>160600</student_id>
        <gender>male</gender>
        <dob>23-06-95</dob>
        <age>21</age>
        <email>JohnSnow@gmail.com</email>
        <mobilenumber>57675060</mobilenumber>
        <address>Winter Fel</address>
        <cohort>BSE15PT</cohort>
        <programme>Software Engineering</programme>
        <mode>PT</mode>
    </student> 
    <student>
        <firstname>meryl</firstname>
        <lastname>Burton</lastname>
        <student_id>150500</student_id>
        <gender>female</gender>
        <dob>26-07-95</dob>
        <email>mirena@gmail.com</email>
        <mobilenumber>57800603</mobilenumber>
        <address>rose hill</address>
        <cohort>BSE15AFT</cohort>
        <programme>software engineering</programme>
        <mode>ft</mode>
    </student>
</students> 
EOF;
$xml = simplexml_load_string($xml);
$names = $xml->xpath("/students/student[firstname = 'meryl']");
print_r($names);
  

ДЕМОНСТРАЦИЯ:

http://ideone.com/Z23XQY