我试图从wikipedia获得谚语的列表。无法找到正确的XPath表达式(到结果合并)
我打印的选择:
- 的类别(如 “攻击”, “猿”)
- 的谚语(如 “持久不负有心人”)
- 的解释(如“他一直试图达到自己的目标,最终获得成功。你必须坚持下去。”)
但在加入他们以正确的方式很多困难。我想和像一个数组,结束了:
array(
0 => array(
'category' => 'aanval',
'proverb' => 'De aanval is de beste verdediging.',
'explanation' => array(
0 => 'Je kunt in een strijd of ruzie beter zelf actie ondernemen dan afwachten.',
)
),
1 => array(
'category' => 'aap',
'proverb' => 'Al draagt een aap een gouden ring, het is en blijft een lelijk ding.',
'explanation' => array(
0 => 'Wie zich mooi aankleedt wordt daarmee zelf nog niet mooi.',
1 => 'Of: Wie zich kleedt als iemand van aanzien wordt daarmee nog niet aanzienlijk.',
2 => 'Of: Fraaie kleding en sieraden maken een lelijk mens niet mooi.'
)
),
2 => array(
'category' => 'aap',
'proverb' => 'Als apen hoger klimmen willen, ziet men gauw hun blote billen.',
'explanation' => array(
0 => 'Iemand die meer wil dan hij kan, maakt zich snel belachelijk.',
)
),
);
这是我现在使用的代码:
if ($x = urlToXpath($url, true))
{
$keywords = array();
foreach ($x->query('/html/body/div[3]/div[3]/h2/span[@class="mw-headline"]') as $node)
{
$keywords[] = trim($node->nodeValue);
}
$data = array();
foreach ($x->query('/html/body/div[3]/div[3]/dl/dd/dl') as $node)
{
$proverbs = array();
foreach ($x->query('dd[@style="font-weight: bold"] | dd/b', $node) as $childNode)
{
$proverbs[] = trim($childNode->nodeValue);
}
$descriptions = array();
foreach ($x->query('dd[position()>1]/small', $node) as $childNode)
{
$descriptions[] = trim(preg_replace('/^((Ook|Of):)/i', '', $childNode->nodeValue));
}
$data[] = array('proverbs' => $proverbs, 'descriptions' => $descriptions);
}
}
问得好,+1。见我的XPath表达式,用于选择这三个希望每谚语节点的答案。我还定义了一个算法如何填充使用这个孩子或XPath表达式您的阵列。 – 2011-03-14 13:31:26