Newsgroup: it.comp.www.php
Titolo: estrarre BODY di un documento html

usando la classe DOMDocument si può accedere ai vari nodi di un documento.
Mi interesserebbe però estrarre solo il contenuto del BODY (e 
possibilmente anche quello dell'HEAD), senza andare a scandagliare tutti 
i childNodes.
 
E' possibile?


DOMXpath
http://it1.php.net/manual/en/class.domxpath.php
 
-- 
I fatti mi cosano

 
http://it1.php.net/manual/en/class.domxpath.php
 
 
ma se non erro mi viene sempre restituito un array di nodi figli, di cui 
dovrei estrarre nome, contenuto, attributi...
Non è possibile avere una stringa contenente tutto il codice html tra 
<body> e </body>?


e body non è un figlio di html?
Guarda, se perdi 5 minuti a _leggere_ la documentazione vedrai che i 
problemi che incontri li risolvi più facilmente.
Qualsiasi problema tu incontri c'è una probabilità del 95% e rotti che 
sia già stato trovato e risolto centinaia di volte, e che la soluzione 
ci sia e che basti leggerla
 
 
 
$html = "
html
  head
  body Corpo
  "; //contenuto di test.html
 
$doc = new DOMDocument;
 
// We don't want to bother with white spaces
$doc->preserveWhiteSpace = false;
 
$doc->Load('test.html');
$xpath= new DOMXPath($doc);
$query='//body';
$entries = $xpath->query($query);
 
print_r($entries->item(0)->nodeValue);
 
##########
marco@athlonno ~/tmp $ php test.php
Corpo


 ci sia e che basti leggerla
 
<body>
     <b>corpo</b>
</body>
 
il problema è che i tag <b>...</b> non vengono inclusi, infatti "corpo" 
_non_ viene visualizzato in grassetto
Deve essere estratto quindi tutto il codice: testo, tag, commenti, ecc...

 Deve essere estratto quindi tutto il codice: testo, tag, commenti, ecc...
 
print_r($entries->item(0)->childNodes->item(0));
marco@athlonno ~/tmp $ php test.php
DOMElement Object
(
     [tagName] => b
     [schemaTypeInfo] =>
     [nodeName] => b
     [nodeValue] => Corpo 
 
     [nodeType] => 1
     [parentNode] => (object value omitted)
     [childNodes] => (object value omitted)
     [firstChild] => (object value omitted)
     [lastChild] => (object value omitted)
     [previousSibling] =>
     [attributes] => (object value omitted)
     [ownerDocument] => (object value omitted)
     [namespaceURI] =>
     [prefix] =>
     [localName] => b
     [baseURI] => /home/marco/tmp/test.html
     [textContent] => Corpo
)
 
Dai, un minimo di impegno ...


 Dai, un minimo di impegno ...
 
e come immaginavo devo scansionare manualmente, estraendo nome del tag, 
attributi, contenuto...

 attributi, contenuto...SimpleXml credo supporti xpath
Sì e ha un metodo asxml che fa quello che chiedi
http://php.net/manual/en/simplexmlelement.asxml.php
 


 
http://php.net/manual/en/simplexmlelement.asxml.php
 
 
"SimpleXml credo supporti xpath" non l'ho scritto io, sei sicuro che hai 
risposto a me?
 


Troppo lavoro ... mi sa che mi sono autorisposto
Cmq simplexml supporta xpath e asxml è quello che cerchi
 
Ciao
M


 Cmq simplexml supporta xpath e asxml è quello che cerchi
 
bene, grazie ;)

 Cmq simplexml supporta xpath e asxml è quello che cerchi
 
Scusate se mi intrometto, ma anch'io vorrei capire il funzionamento.
Ecco il mio listato:
 
$dom = new DOMDocument();
$dom->loadHTMLFile('test.html');
 
$xPath = new DOMXPath($dom);
$result = $xPath->query('//body');
 
echo $result->item(0)->nodeValue;
 
Ed ecco il contenuto del file (test.html):
 
<!DOCTYPE html>
<html>
<head>
     <title>Impresa</title>
</head>
<body>
     <div>
         Elenco articoli...
     </div>
</body>
</html>
 
Praticamente non compaiono i tag DIV.
Perchè?

 Cmq simplexml supporta xpath e asxml è quello che cerchi
 
 


 Perchè?
Effetto fnord?


Il 18/12/2012 20:47, alex ha scritto:

Ma usare una RegEx ?

 Ma usare una RegEx ?
 
si, alla fine ho usato quella