Php 在XPath中仅检索body元素的文本时,我只想排除JavaScript标记内容
在XPath中仅检索body元素的文本时,我只想排除JavaScript标记内容 ▼index.htmlPhp 在XPath中仅检索body元素的文本时,我只想排除JavaScript标记内容,php,dom,xpath,Php,Dom,Xpath,在XPath中仅检索body元素的文本时,我只想排除JavaScript标记内容 ▼index.html <body> I want to acquire only "text excluding HTML tag" included in this part. <script language="JavaScript" type="text/javascript"> var foo = 42; </script> </bo
<body>
I want to acquire only "text excluding HTML tag" included in this part.
<script language="JavaScript" type="text/javascript">
var foo = 42;
</script>
</body>
我只想获取本部分中包含的“不包括HTML标记的文本”。
var-foo=42;
我用DomCrawler创建了以下代码。但是,因为它包含JavaScript标记内容,我无法获得预期的结果。
<?php
$crawler->filterXPath('//body')->each(function (DomCrawler $node) use ($url) {
$result = trim($node->text());
});
我建议您使用DomXpath,您可以在其中过滤内容。
通过查询。
我对Domcrawler不是很确定
<?php
// to retrieve selected html data, try these DomXPath examples:
$file = $DOCUMENT_ROOT. "test.html";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);
// example 1: for everything with an id
//$elements = $xpath->query("//*[@id]");
// example 2: for node data in a selected id
//$elements = $xpath->query("/html/body/script");
// example 3: same as above with wildcard
$elements = $xpath->query("*/script");
if (!is_null($elements)) {
foreach ($elements as $element) {
echo "<br/>[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->nodeValue. "\n";
}
}
}
?>
我建议您使用DomXpath,您可以在其中过滤内容。
通过查询。
我对Domcrawler不是很确定
<?php
// to retrieve selected html data, try these DomXPath examples:
$file = $DOCUMENT_ROOT. "test.html";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);
// example 1: for everything with an id
//$elements = $xpath->query("//*[@id]");
// example 2: for node data in a selected id
//$elements = $xpath->query("/html/body/script");
// example 3: same as above with wildcard
$elements = $xpath->query("*/script");
if (!is_null($elements)) {
foreach ($elements as $element) {
echo "<br/>[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->nodeValue. "\n";
}
}
}
?>
尝试一下:
<?php
$x = '<body>
I want to acquire only "text excluding HTML tag" included in this part.
<script language="JavaScript" type="text/javascript">
var foo = 42;
</script>
</body>';
$dom = new DOMDocument();
$dom->loadHTML($x);
$script = $dom->getElementsByTagName('script')->item(0);
$script->parentNode->removeChild($script);
$body = $dom->getElementsByTagName('body')->item(0);
echo $body->nodeValue;
尝试一下:
<?php
$x = '<body>
I want to acquire only "text excluding HTML tag" included in this part.
<script language="JavaScript" type="text/javascript">
var foo = 42;
</script>
</body>';
$dom = new DOMDocument();
$dom->loadHTML($x);
$script = $dom->getElementsByTagName('script')->item(0);
$script->parentNode->removeChild($script);
$body = $dom->getElementsByTagName('body')->item(0);
echo $body->nodeValue;
另一方面,你的意思是不想排除div
内容吗?我想获取除javascript标记部分之外的所有主体元素的文本。如果您有一个div标记,我想将其内容检索为text。您可以使用xpath查询/text()[祖先::body][not(祖先::script)]获取那些text
节点。另一方面,您的意思是不想排除div
内容吗?我想获取除javascript标记部分之外的所有body元素的文本。如果您有一个div标记,我想将其内容检索为text您可以使用xpath查询获取那些text
节点/text()[祖先::体][not(祖先::脚本)]
我想得到一个不是JavaScript的部分。但是,答案很有用。我想得到一个不是JavaScript的部分。但是,答案很有帮助。是的。它按预期工作。但我想知道XPath。是的。它按预期工作。但我想知道XPath。