使用xpath获取文本内容

时间:2013-01-27 08:26:05

标签: php xpath

我有一些像这样的HTML:

<dd class="price">
    <sup class="symbol">&#36;</sup><span class="dollars">58</span><sup class="cents">.00</sup>
</dd>

将$ 58.00作为一个字符串返回的xpath是什么?

我正在使用PHP:

$xpath = '?????';
$result = $xml->xpath($xpath);
echo $result[0];   // want this to show $58.00, possible?

3 个答案:

答案 0 :(得分:3)

这些在您的情况下有效,请查看以下链接的更多详细信息;

$html = '<dd class="price">
            <sup class="symbol">&#36;</sup><span class="dollars">58</span><sup class="cents">.00</sup>
         </dd>';
$dom = new DOMDocument();
$dom->loadXML($html);
$xpt = new DOMXpath($dom);
foreach ($xpt->query('//dd[@class="price"]') as $node) {
    // outputs: $58.00
    echo trim($node->nodeValue);
}
// or
$xml = new SimpleXMLElement($html);
$res1 = $xml->xpath('//dd[@class="price"]/sup');
$res2 = $xml->xpath('//dd[@class="price"]/span');
// outputs: $58.00
printf('%s%s%s', (string) $res1[0], (string) $res2[0], (string) $res1[1]);
  1. DOMDocument
  2. DOMXPath
  3. SimpleXMLElement

答案 1 :(得分:0)

data()将返回当前上下文中的所有内容。尝试

//dd/data()

答案 2 :(得分:0)

您尚未向我们展示您的代码,因此我不知道您使用的是哪个平台。如果您有能够评估非节点XPath表达式的内容,那么您可以使用:

string(//dd[@class = 'price'])

如果没有,您可以选择节点

//dd[@class = 'price']

并且您正在使用的API应该能够获取所选节点的内部文本值。