假设我有以下网页:
<html>
<body>
<div class="transform">
<span>1</span>
</div>
<div class="transform">
<span>2</span>
</div>
<div class="transform">
<span>3</span>
</div>
</body>
</html>
我想找到包含类转换的所有div元素并获取每个div元素中的文本?
我知道我可以使用正则表达式轻松地做到这一点,但我想知道如何在没有正则表达式的情况下做到这一点,但是解析xml并找到我需要的所需节点。
我知道在这个例子中我可以遍历所有的div。但这只是为了说明我需要的一个例子。
在此示例中,我需要查询包含属性class=transform
谢谢!
答案 0 :(得分:1)
可以使用SimpleXML - 请参阅以下示例:
$string = "<?xml version='1.0'?>
<html>
<body>
<div class='transform'>
<span>1</span>
</div>
<div>
<span>2</span>
</div>
<div class='transform'>
<span>3</span>
</div>
</body>
</html>";
$xml = simplexml_load_string($string);
$result = $xml->xpath("//div[@class = 'transform']");
foreach($result as $node) {
echo "span " . $node->span . "<br />";
}
使用xpath ...
更新了它答案 1 :(得分:1)
您可以使用xpath来处理项目。对于该特定查询,您将使用:
div[contains(concat(" ",@class," "), concat(" ","transform"," "))]
完整的PHP示例:
<?php
$document = new DomDocument();
$document->loadHtml($html);
$xpath = new DomXPath($document);
foreach ($xpath->query('div[contains(concat(" ",@class," "), concat(" ","transform"," "))]') as $div) {
var_dump($div);
}
如果你知道CSS,这里有一个方便的XP选择器到XPath表达式映射:http://plasmasturm.org/log/444/ - 你可以找到那里列出的上面的例子,以及其他常见的查询。
如果你经常使用它,你可能会发现我的csslib库很方便。它提供了一个包装器csslib_DomCssQuery
,类似于DomXPath
,但使用的是CSS选择器。
答案 2 :(得分:0)
好吧我想要的东西可以使用php xpath轻松实现:
示例:
http://ditio.net/2008/12/01/php-xpath-tutorial-advanced-xml-part-1/