Предположим, что $element
равно DOMElement
, содержащему <li id="SalesRank">...
Если вы делаете что-то вроде этого:
foreach( $element->childNodes as $node){
echo get_class( $node) . "\n";
// Print content too for debug:
// echo $node->nodeValue . "\n";
}
Вы должны получить результаты вроде:
DOMText // \n
DOMElement // <b>Amazon Best Sellers Rank:</b>
DOMText // #20,267 Paid in Kindle Store (\n
DOMElement // <a ...
...
То есть $element->childNodes->item( 2)->nodeValue
должен содержать вашу строку (делать домашнее задание, проверять каждую итерацию, проверять документацию для каждого элемента).
Чем вы можете просто получить строку до первого (
:
$text = $element->childNodes->item( 2)->nodeValue;
$pos = strpos( $text, '(') - 2; // Add handling for no occurance
return substr( $text, 0, $pos);
Или вы можете перебрать все дочерние узлы и проверить это на лету
foreach( $element->childNodes as $node){
// Example, rather use regexp with preg_match
if( (get_class( $node) == 'DOMText')
&& (strncmp( $node->nodeValue, "\n#", 2) == 0)){
// Tadaaa
break;
}
}
Или, если вам нужно решение, которое убьет несколько котят:
preg_match( '~(#([\d,]+) ([^<>(]+))~', $element->nodeValue, $match);