Php 在XPath中仅检索body元素的文本时,我只想排除JavaScript标记内容

Php 在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

在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>

</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。