Спасибо, джентльмен, за то, что указал на мое недоразумение с доступом к методам, недоступным в дочернем объекте.Но строка:
echo $doc->saveHTML($result->item(0));
генерирует только предупреждение (без html-строки, которую я хочу иметь).К счастью, я нашел другое решение, и вот оно:
<?php
$subject = '<html>
<head>
<title>A very short ebook</title>
<meta name="charset" value="utf-8" />
</head>
<body>
<h1 class="bookTitle">A very short ebook</h1>
<p style="text-align:right">Written by Kovid Goyal</p>
<div class="introduction">
<p>A very short ebook to demonstrate the use of XPath.</p>
</div>
<h2 class="chapter">Chapter One</h2>
<p>This is a truly fascinating chapter.</p>
<h2 class="chapter">Chapter Two</h2>
<p>A worthy continuation of a fine tradition.</p>
</body>
</html>';
$doc = new DOMDocument();
$doc->loadHTML($subject);
$xpath = new DOMXpath($doc);
$result = $xpath->query("//div");
//echo $doc->saveHTML($result->item(0));
echo domNodeList_to_string($result);
function domNodeList_to_string($DomNodeList) {
$output = '';
$doc = new DOMDocument;
while ( $node = $DomNodeList->item($i) ) {
// import node
$domNode = $doc->importNode($node, true);
// append node
$doc->appendChild($domNode);
$i++;
}
$output = $doc->saveHTML();
$output = print_r($output, 1);
// I added this because xml output and ajax do not like each others
//$output = htmlspecialchars($output);
return $output;
}
php>
, поэтому, если у кого-то есть запрос, подобный этому:
$result = $xpath->query("//div");
, тогда получится вывод необработанной строки html:
<div class="introduction">
<p>A very short ebook to demonstrate the use of XPath.</p>
</div>
если запрос:
$result = $xpath->query("//p");
, тогда вывод будет:
<p style="text-align:right">Written by Kovid Goyal</p><p>A very short ebook to demonstrate the use of XPath.</p><p>This is a truly fascinating chapter.</p><p>A worthy continuation of a fine tradition.</p>
Кто-нибудь знает более простой (встроенный в php) метод для получения того же результата?