HTML nie zawsze jest poprawnym dokumentem XML ;] - więc ze stronami niemal zawsze będzie podobnie... mając tego świadomość możesz wyłączyć wyświetlanie błędów przy tej funkcji
@$objDOM->load("http://www.onet.pl");
kod strony zapisanej z obiektu DOM może trochę odbiegać od źródeł... gdy będziesz więcej programował i poznawał inne języki to polecam korzystanie z silnika przeglądarki np. WebKit w Fremworku Qt (ale to już język C++)...
na razie nie przejmuj się tymi błędami... jednak możesz mieć problemy z kodowaniem niektórych stron - czytaj dokumentację i komentarze jak sobie z tym poradzić ;] - dasz radę...
wszystkie linki w wyr. xpath nie ważne gdzie się znajdują to po prostu "//a", z kolei wewnątrz jakiegoś obiektu o określonym id nie bezpośrednie dzieci to "//*[@id="cos_tam"]//a" - zwracaj uwagę kiedy np. stosować "//" a kiedy "/", ale to już chyba doczytałeś... i podobnie jak przykłady wyżej jeśli szukasz xpath względem jakiegoś elementu to zaczynaj wyrażenie od "./"
ps. względem wyr. CSS "//" odpowiada spacji " " a "/" odpowiada ">"
Cytat(marcinek37 @ 12.04.2013, 02:04:14 )

1. wydaje się, że to ta metoda: createElement przerabia kod HTML na encje
a nie ma ona żadnych dodatkowych parametrów... zrobiłem to łopatologicznie - wygenerowałem plik, a potem go przerobiłem innym skryptem - innego rozwiązania chyba nie znajdziemy
<?php
$oDom = new DOMDocument('1.0', 'utf-8');
$oDom->formatOutput = true;
$oProductList = $oDom->appendChild($oDom->createElement('products_list'));
$oProduct = $oProductList->appendChild($oDom->createElement('product'));
$oProduct->appendChild($oDom->createElement('id', 1));
$oName = $oProduct->appendChild($oDom->createElement('name')); /* @var $oName DOMNode */
$sName = '<b>AAA';
$oDomTmp = new DOMDocument('1.0', 'utf-8');
// na wszelki wypadek doklejamy body żeby nie tworzyło paragrafów w czystym tekście,
// jeśli wystąpi 2 razy body to zostanie pominięte
@$oDomTmp->loadHTML('<body>'.$sName); // wyciszenie błędów przy niepoprawnych html'ach
$oBody = $oDomTmp->getElementsByTagName('body')->item(0); /* @var $oBody DOMNode */
foreach ($oBody->childNodes as $oEl) { /* @var $oEl DOMNode */
$oName->appendChild($oDom->importNode($oEl, TRUE));
}
Cytat(marcinek37 @ 12.04.2013, 02:04:14 )

2. postanowiłem wgłębić się w DOM, dla przykładu chcę wykonać listę linków znajdujących się na onecie
<?
$objDOM = new DOMDocument();
$objDOM->load("http://www.onet.pl");
?>
no i pokazała się ogromna lista błędów - czyja to wina? skryptu czy onetu?
<?php
$oDOM = new DOMDocument();
@$oDOM->loadHTMLFile("http://www.onet.pl");
$oXPath = new DOMXPath($oDOM);
echo $oXPath->query('//a')->length;