Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php xpath中的条件值检索_Php_Xpath_Xhtml - Fatal编程技术网

php xpath中的条件值检索

php xpath中的条件值检索,php,xpath,xhtml,Php,Xpath,Xhtml,我正在尝试使用php xpath求值或查询检索某些值。但却无法成功地做到这一点。 以下是页面的html结构: <div id="productinfo"> <h2> <span id="productname">Computer</span> </h2> <span id="servieidLabel" style=""> Service ID: </span> <span id="snLabel" sty

我正在尝试使用php xpath求值或查询检索某些值。但却无法成功地做到这一点。 以下是页面的html结构:

<div id="productinfo">
<h2>
<span id="productname">Computer</span>
</h2>
<span id="servieidLabel" style=""> Service ID: </span>
<span id="snLabel" style="display: none"> Serial Number: </span>
<span id="servidno">12345ABCD</span>

电脑类
服务ID:
序列号:
12345ABCD
我只想显示style=“display:none”的内容,或者如果style属性根本不存在的话。因此,结果是:-服务ID:12345ABCD

我试过:

$ServLab = $xpath->query("//span[@id='servieidLabel']");
foreach ($ServLab as $entry) {
echo "Service Label:" ,$entry->nodeValue."<br />";
}
$ServLab=$xpath->query(//span[@id='servieidLabel']);
foreach($ServLab作为$entry){
回显“服务标签:”,$entry->nodeValue。“
”; }
输出=服务ID:

$servid=$xpath->query(//span[@id='servidno']);
foreach($servid作为$entry){
回显“服务Id号:”,$entry->nodeValue。“
”; }
输出=空白。而输出应该是12345ABCD。我错过了什么

如果我尝试:

$prodid = $xpath->evaluate("//div[@id='productinfo']");
foreach ($prodid as $entry) {
echo $entry->nodeValue."<br />";
}
$prodid=$xpath->evaluate(“//div[@id='productinfo']”);
foreach($prodid作为$entry){
echo$entry->nodeValue.“
”; }
输出=服务ID:序列号:


请提供帮助。

您首先提出的问题可以在一个查询中解决。像这个:

$ServLab = $xpath->query("//div/span[string-length(@style) < 1]");
foreach ($ServLab as $entry) {
    echo $entry->nodeValue."<br />";
}

注意在查询中添加了“/div”。还可以通过在包装器中包装所有细节跨度,使其更具体。然后在包装上选择。感谢您的快速响应。我试过这个,效果很好。但不是我正在使用的页面。刚刚意识到这些值是通过javascript插入页面的。因此,我必须找到一种方法通过js而不是html来获得它。在js中,您可以重用给定的xpath!祝你的网页/网站好运!尝试了很多不同的方法,比如XMLReader、SimpleXML等等,但不知道如何去做。更好的是,我会问一个单独的问题,并提供更多细节。
$ServLab = $xpath->query("//div/span[string-length(@style) < 1]");
foreach ($ServLab as $entry) {
    echo $entry->nodeValue."<br />";
}
Service ID: 
12345ABCD