Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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 DOM挑战->;获取不在任何元素中的文本_Php_Dom_Html Parsing - Fatal编程技术网

Php DOM挑战->;获取不在任何元素中的文本

Php DOM挑战->;获取不在任何元素中的文本,php,dom,html-parsing,Php,Dom,Html Parsing,下面是我如何获得dom树的: $html = file_get_contents('somefile.html'); $dom = new DOMDocument(); @$dom->loadHTML($html); $dom_document = new DomXPath($dom); $dom_object = $dom_document->query('somePathHere'); $dom_对象的html结构: <div> <a href='some

下面是我如何获得dom树的:

$html = file_get_contents('somefile.html');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$dom_document = new DomXPath($dom);
$dom_object = $dom_document->query('somePathHere');
$dom_对象的html结构:

<div>
  <a href='something'>some text here</a>
  I want this
</div>

精确性:我希望避免进行多个xpath查询。我想坚持我的。。。先谢谢你。干杯Marc

使用nodeType获取文本节点:

foreach($nodes as $node) {
    if($node -> nodeType == 3) {
        echo $node -> nodeValue . "<br />";
    }
}
foreach($nodes作为$node){
如果($node->nodeType==3){
echo$node->nodeValue。“
”; } }
说明:在php文档中,任何文本都位于节点内。在您的例子中,它是一个文本节点,根据PHP的XML_node_常量,这意味着3


有关详细信息:

我不知道xml的预期结构,但这适用于您的特定请求:

/html/body/div/text()

这将仅选择具有相关div的直接父级的文本节点。您也可以使用常规的
//div/text()
,但更具体的查询通常更好/更快。

div是否有名称或id?如果不是,div标签的显示顺序是否总是相同的(就像它总是打开第二个div一样)?你好,阿哈修斯。div标签没有id,结构总是一样的,@Ahatius说你可以为你的div添加一个id,然后你就可以得到文本了。你好,MahanGM。向div添加id如何解决我的问题?@Mark我对DOM不感兴趣,但应该有一些方法来引用div,然后删除子标记,只获取div内容本身。我的节点类型为1。。。所以你的建议是不起作用的你好爆炸药丸。。。谢谢你的帮助。不过,正如前面提到的,我正在寻找一种不需要有多个xpath查询的解决方案……请重新阅读我的答案。您可以使用这些查询中的任何一个。。你不需要两者兼而有之。
/html/body/div/text()