Поэтому я использую XPath для поиска довольно большого XML-документа. Что я хотел бы сделать, так это после получения начальных результатов выполнить поиск в этих результатах (а затем выполнить поиск еще 2 раза). Тем не менее, я не уверен, как искать снова. Я попробовал это:
Несколько запросов с использованием '|' Оператор:
$dom = new DOMDocument();
$dom->load('courses.kml');
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('kml', "http://earth.google.com/kml/2.1");
//merge queries using | operator
$query = $xpath->query("//kml:Placemark[kml:type='".$_POST['type']."'] | //kml:Placemark[kml:club_type='".$_POST['club_type']."']");
foreach($query as $result){
echo $result->nodeValue . "<br /><br />";
}
Применение второго выражения XPath к первому объекту запроса:
$dom = new DOMDocument();
$dom->load('courses.kml');
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('kml', "http://earth.google.com/kml/2.1");
$query = $xpath->query("//kml:Placemark[kml:type='".$_POST['type']."']");
$xpath2 = new DOMXPath($query);
$query2 = $xpath2->query("//[club_type='".$_POST['club_type']."']");
//echo $result->nodeValue . "<br /><br />";
foreach($query2 as $result2){
echo $result2->nodeValue . "<br /><br />";
}
Но, похоже, это не сработало, поэтому я попытался:
Запустить два отдельных экземпляра и объединить
//1st
$dom = new DOMDocument();
$dom->load('courses.kml');
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('kml', "http://earth.google.com/kml/2.1");
$query = $xpath->query("//kml:Placemark[kml:club_type='".$_POST['club_type']."']");
//2nd
$dom2 = new DOMDocument();
$dom2->load('courses.kml');
$xpath2 = new DOMXPath($dom2);
$xpath2->registerNamespace('kml', "http://earth.google.com/kml/2.1");
$query2 = $xpath2->query("//kml:Placemark[kml:type='".$_POST['type']."']");
//merge object
$obj_merged = (array) array_merge((array) $query, (array) $query2);
foreach($obj_merged as $result){
echo $result->nodeValue . "<br /><br />";
}
И я пробовал и другие вещи, в том числе следующие рекомендации: php xpath: query в результате запроса , хотя это не совсем то же самое, я все еще не мог получить результаты. Я не получаю никаких ошибок, только пустые страницы.
уточнить:
Если бы это был мой XML-документ:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<Placemark id="placemark1">
<name>Test Country Club1 </name>
<description>
<![CDATA[
<div class="contact">Post Office Box 329 <a href="#" target="_blank">website</a></div>
]]>
</description>
<alpha>a</alpha>
<position>2</position>
<type>Public/Daily Fee</type>
<club_type>other</club_type>
<hole_type>9hole</hole_type>
<styleUrl>#nineholeStyle</styleUrl>
<Point>
<coordinates>-79.285576,37.111809</coordinates>
</Point>
</Placemark>
<Placemark id="placemark2">
<name>Test Country Club2</name>
<description>
<![CDATA[
<div class="contact">Post Office Box 329 <a href="#" target="_blank">website</a></div>
]]>
</description>
<alpha>a</alpha>
<position>2</position>
<type>Public/Daily Fee</type>
<club_type>other</club_type>
<hole_type>9hole</hole_type>
<styleUrl>#nineholeStyle</styleUrl>
<Point>
<coordinates>-79.285576,37.111809</coordinates>
</Point>
</Placemark>
<Placemark id="placemark3">
<name>Test Country Club3</name>
<description>
<![CDATA[
<div class="contact">Post Office Box 329 <a href="#" target="_blank">website</a></div>
]]>
</description>
<alpha>a</alpha>
<position>3</position>
<type>Public/Daily Fee</type>
<club_type>other</club_type>
<hole_type>9hole</hole_type>
<styleUrl>#nineholeStyle</styleUrl>
<Point>
<coordinates>-79.285576,37.111809</coordinates>
</Point>
</Placemark>
<Placemark id="placemark4">
<name>Test Country Club4</name>
<description>
<![CDATA[
<div class="contact">Post Office Box 329 <a href="#" target="_blank">website</a></div>
]]>
</description>
<alpha>a</alpha>
<position>4</position>
<type>Private</type>
<club_type>Greengrass</club_type>
<hole_type>18hole</hole_type>
<styleUrl>#nineholeStyle</styleUrl>
<Point>
<coordinates>-79.285576,37.111809</coordinates>
</Point>
</Placemark>
</Document>
</kml>
Как мне искать type, club_type, hole_type и / или alpha? Скажите, если бы я хотел вернуть только 18-луночные клубы Private Greengrass, начинающиеся с 'a'