我正在尝试为php html dom创建一些东西来处理元素路径模式。
看起来很休闲。我可以有不同的路径,我希望有一些文本。等;
$elements = 'h1;span;';
$elements = 'div.test;h2;span';
我试图创建一个函数来处理这些插入但我被困在了 部分以良好的顺序设置'getElementsByTagName()'并接收值 最后一个元素,
我现在所做的事情;
function convertName($html, $elements) {
$elements = explode(';', $elements);
$dom = new DOMDocument;
$dom->loadHTML($html);
$name = null;
foreach ($elements as $element) :
$name. = getElementsByTagName($element)->item(0)->;
endforeach;
$test = $dom->$name.'nodeValue';
print_r($test); // receive value
}
我希望有人能给我一些意见或建议。
答案 0 :(得分:1)
可能是这样的:
function convertName($html, $elements) {
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$elements = explode(';', $elements);
$elemValues = array();
foreach ($elements as $element) {
$nodelist = $xpath->query("//$element");
for($i=0; $i < $nodelist->length; $i++)
$elemValues[$element][] = $nodelist->item($i)->nodeValue;
}
return $elemValues;
}
// TESTING
$html = <<< EOF
<span class="bar">Some normal Text</span>
<input type="hidden" name="hf" value="123">
<h1>Heading 1<span> span inside h1</span></h1>
<div class='foo'>Some DIV</div>
<span class="bold">Bold Text</span>
<p/>
EOF;
$elements = 'h1;span;';
// replace all but last ; with / to get valid XPATH
$elements = preg_replace('#;(?=[^;]*;)#', '/', $elements);
// call our function
$elemValues = convertName($html, $elements);
print_r($elemValues);
<强>输出:强>
Array
(
[h1/span] => Array
(
[0] => span inside h1
)
)