あなたの質問は少し具体的ではないので、解釈する方法はいくつかあります。現在の要素のすべての直接の子要素 (およびそのすべてのサブ要素) が必要な場合は、次を使用します。
*/*
あなたの例では、これはあなたに与えます
<span>
<cite>
</cite>
</span>
と
<span>
<cite>
</cite>
</span>
すべての子ノードが必要な場合は、node()
代わりに次を使用します*
。
*/node()
あなたの例では、これにより、上記の両方のサブ要素と、改行/インデントtext()
ノードが提供されます。
ただし、子ノードのみを保持し、その子ノードは保持しない場合 (つまり、span
要素のみを保持し、子要素を保持しない場合)、次の 2 つの式を使用する必要があります。
- を介して直接の子要素を選択します
*/*
- これらの子要素を処理し、テキスト ノードのみを選択し、孫要素は選択しません。
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