您的問題有點不足,因此有多種解釋方法。如果你想在當前元素(及其所有子元素)的所有直接子元素,然後用
*/*
對於你的榜樣,這給你
<span>
<cite>
</cite>
</span>
和
<span>
<cite>
</cite>
</span>
如果你想要所有的小孩節點,然後用node()
而不是*
:
*/node()
對於您的示例,這會爲您提供上述兩個子元素以及換行符/縮進text()
節點。
但是,如果您想要只有子節點,而不是他們的孩子(即,只有span
元素,但沒有他們的子元素),則必須使用兩個表達式:
- 通過
*/*
- 過程中選擇的直接子元素的子元素,並只選擇文本節點,而不是孫子元素通過
text()
我的PHP是一個有點生疏,但它應該工作有點像這樣:
$doc = new DOMDocument;
// set up $doc
$xpath = new DOMXPath($doc);
// perform step #1
$childElements = $xpath->query('*/*');
$directChildren = array();
foreach ($childElements as $child) {
// perform step #2
$textChildren = $xpath->query('text()', $child);
foreach ($textChildren as $text) {
$directChildren[] = $text;
}
}
// now, $directChildren contains all text nodes
感謝孩子::軸建議。這應該是被接受的答案。 – Eternal21 2015-01-07 18:23:39