2016-06-20 1 views
0

Мой record.xml выглядит следующим образом:PHP XPath запросов получить узлы, содержащие Mutiple суб струне

<record> 
    <name>john</name> 
    <gender>male</gender> 
    <subject>mathematics, english, science</subject> 
</record> 
<record> 
    <name>jamie</name> 
    <gender>female</gender> 
    <subject>mathematics, science</subject> 
</record> 
<record> 
    <name>jamie</name> 
    <gender>female</gender> 
    <subject>social-science, english</subject> 
</record> 

Я хочу написать XPATH запрос, который будет возвращать записи узел, содержащий один или более указанные предметы.

Для примера:

Если хотите получить запись студента с предметом математики и науки

затем второй отчет должен быть возвращен т.е.

<record> 
    <name>jamie</name> 
    <gender>female</gender> 
    <subject>mathematics, science</subject> 
</record> 

Это то, что я сделал до сих пор:

<?php 
     $xmldoc = new DOMDocument(); 
     $xmldoc->load('record.xml'); 

     $xpathvar = new Domxpath($xmldoc); 

     $res = $xpathvar->query('//record/subject[. = "science"]'); 
     foreach($res as $data){ 
       echo $data->textContent.'<br>'; 
     } 
?> 

Я хочу, чтобы добиться результата то вроде этого:

<?php 
     $xmldoc = new DOMDocument(); 
     $xmldoc->load('record.xml'); 

     $xpathvar = new Domxpath($xmldoc); 

     $res = $xpathvar->query('//record/subject[. = "science" and mathematics]'); 
     foreach($res as $data){ 
       echo $data->textContent.'<br>'; 
     } 
?> 
+0

Какие проблемы вы бежите в? Какую библиотеку PHP вы используете? – chris85

+0

@ chris85 Я обновил вопрос – Ajay

ответ

1

Там на самом деле не собирается быть хорошим способом добиться этого, если вы не можете разделить предметы в свои собственные узлы.

/r/record[contains(subject,"science") and contains(subject,"mathematics") and ... ] 

не делает ничего, чтобы определить, где слово разделены, так что если у вас есть объект, скажем, «компьютерные науки», то вы получите ложный удар. Вам будет лучше, вы можете разделить текст темы на отдельные элементы.

<record> 
    <name>jamie</name> 
    <gender>female</gender> 
    <subject>mathematics</subject> 
    <subject>science</subject> 
</record> 

xpath = /r/record[subject[.="science" and .="mathematics" ... and ...] ] 

или есть какая-то форма слова ломает разделитель так:

<record> 
    <name>jamie</name> 
    <gender>female</gender> 
    <subject>|mathematics|science|</subject> 
</record> 

xpath = /r/record[contains(subject,"|science|") and contains(subject,"|mathematics|") and ... ] 
+0

Я не могу изменить файл xml. :( – Ajay

+0

Я решил эту проблему с этим запросом. Спасибо @Phil B за вашу помощь $ xpathvar-> query ('// запись [содержит (тема, «наука») или содержит (предмет, «математика»)]'); – Ajay

Смежные вопросы