如何在父 Xpath Class 中排除 Class? PHP
How to Exclude Class in Parent Xpath Class? PHP
把我逼上墙是这样的DOM
<div class="product-intro"><p class="product-desc"><span class="product-model">234</span>Product Description</p></div>
不是这样的...参数无效,未找到节点:
$node3 = $xp->query("//p[@class='product-desc and not(@class='product-model']");
$node3 = $xp->query("//p[@class='product-desc'][not([@class='product-model'])]");
仅此一项:
$node3 = $xp->query("//p[@class='product-desc']");
就获得结果而言,效果非常好。
输出是
234Product Description
我知道我可以做一个字符串替换,但不是很理想。我如何让它在我的查询中排除 product-model
class?
整个脚本:
$x = '<div class="product-item productContainer" data-itemno="234">
<div class="product-and-intro">
<div class="product">
<a href="/en/234.html" title="Product Description">
<img src="/ProductImages/106/234.jpg" alt="Product Description" class="itemImage" />
<div class="product-intro">
<p class="product-desc"><span class="product-model">234</span>Product Description</p>
<p class="price"><span class="us">US$</span>6.50 <span class="oldprice"><s>$ 13.00</s></span></p>
</div>
</a>
</div>
</div>
</div>';
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($x);
$xp = new DOMXPath($dom);
$node1 = $xp->query("//div[@class='product']//img");
$node2 = $xp->query("//span[@class='product-model']");
$node3 = $xp->query("//p[@class='product-desc']");
// $node3 = $xp->query("//p[@class='product-desc']/text()[2]");
// $node3 = $xp->query("//p[@class='product-desc' and not(span/@class='product-model')]");
$node4 = $xp->query("//p[@class='price']");
foreach ($node1 as $n) {
echo $n->getAttribute('src');
echo '<br>';
}
foreach ($node2 as $n2) {
echo $n2->nodeValue;
echo '<br>';
}
foreach ($node3 as $n3) {
echo $n3->nodeValue;
echo '<br>';
}
foreach ($node4 as $n4) {
echo $n4->nodeValue;
echo '<br>';
}
如果你想select所有@class
属性值为product-desc
的元素,然后过滤掉那些有span
子元素的元素- 具有 @class
属性值的元素 product-model
您可以使用此 XPath 表达式:
//p[@class='product-desc' and not(span/@class='product-model')]
或者,整体
$node3 = $xp->query("//p[@class='product-desc' and not(span/@class='product-model')]");
把我逼上墙是这样的DOM
<div class="product-intro"><p class="product-desc"><span class="product-model">234</span>Product Description</p></div>
不是这样的...参数无效,未找到节点:
$node3 = $xp->query("//p[@class='product-desc and not(@class='product-model']");
$node3 = $xp->query("//p[@class='product-desc'][not([@class='product-model'])]");
仅此一项:
$node3 = $xp->query("//p[@class='product-desc']");
就获得结果而言,效果非常好。 输出是
234Product Description
我知道我可以做一个字符串替换,但不是很理想。我如何让它在我的查询中排除 product-model
class?
整个脚本:
$x = '<div class="product-item productContainer" data-itemno="234">
<div class="product-and-intro">
<div class="product">
<a href="/en/234.html" title="Product Description">
<img src="/ProductImages/106/234.jpg" alt="Product Description" class="itemImage" />
<div class="product-intro">
<p class="product-desc"><span class="product-model">234</span>Product Description</p>
<p class="price"><span class="us">US$</span>6.50 <span class="oldprice"><s>$ 13.00</s></span></p>
</div>
</a>
</div>
</div>
</div>';
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($x);
$xp = new DOMXPath($dom);
$node1 = $xp->query("//div[@class='product']//img");
$node2 = $xp->query("//span[@class='product-model']");
$node3 = $xp->query("//p[@class='product-desc']");
// $node3 = $xp->query("//p[@class='product-desc']/text()[2]");
// $node3 = $xp->query("//p[@class='product-desc' and not(span/@class='product-model')]");
$node4 = $xp->query("//p[@class='price']");
foreach ($node1 as $n) {
echo $n->getAttribute('src');
echo '<br>';
}
foreach ($node2 as $n2) {
echo $n2->nodeValue;
echo '<br>';
}
foreach ($node3 as $n3) {
echo $n3->nodeValue;
echo '<br>';
}
foreach ($node4 as $n4) {
echo $n4->nodeValue;
echo '<br>';
}
如果你想select所有@class
属性值为product-desc
的元素,然后过滤掉那些有span
子元素的元素- 具有 @class
属性值的元素 product-model
您可以使用此 XPath 表达式:
//p[@class='product-desc' and not(span/@class='product-model')]
或者,整体
$node3 = $xp->query("//p[@class='product-desc' and not(span/@class='product-model')]");