GVKun编程网logo

PHP中的DOMDocument(PHP中的PEAR是什么)

18

在本文中,我们将给您介绍关于PHP中的DOMDocument的详细内容,并且为您解答PHP中的PEAR是什么的相关问题,此外,我们还将为您提供关于document.writePHPXML操作类DOMD

在本文中,我们将给您介绍关于PHP中的DOMDocument的详细内容,并且为您解答PHP中的PEAR是什么的相关问题,此外,我们还将为您提供关于document.write PHP XML操作类DOMDocument、DOMDocument PHP内存泄漏、PHP DomDocument HTML操作、php domdocument 找不到怎么办的知识。

本文目录一览:

PHP中的DOMDocument(PHP中的PEAR是什么)

PHP中的DOMDocument(PHP中的PEAR是什么)

我刚刚开始阅读有关DOM的文档和示例,以便对文档进行爬网和解析。

例如,我有一部分文档如下所示:

    <div id="showContent">    <table>    <tr>        <td>         Crap        </td>    </tr><tr>          <td width="172" valign="top"><a href="link"><img height="91" border="0" width="172"src="img"></a></td>          <td width="10">&nbsp;</td>          <td valign="top"><table cellspacing="0" cellpadding="0" border="0">              <tbody><tr>                <td height="30"><ahref="link">title</a><a><br>                    <span></span>                </a></td>              </tr>              <tr>                <td><img height="1" width="580" src="crap"></td>              </tr>              <tr>                <td align="right">                    <a href="link"><img height="16" border="0" width="65" src="/buy"></a>                </td>              </tr>              <tr>                <td valign="top">                    <p>description.</p>                </td>              </tr>          </tbody></table></td>        </tr>    <tr>        <td>Crap        </td>    </tr>    <tr>        <td>         Crap        </td>    </tr>    </table>    </div>

我正在尝试使用以下代码来获取所有tr标签,并分析其中是否包含废话或信息:

$dom = new DOMDocument();@$dom->loadHTML($html);$xpath = new DOMXPath($dom);$tags = $xpath->query(''.//div[@id="showContent"]'');foreach ($tags as $tag) {    $string="";    $string=trim($tag->nodeValue);    if(strlen($string)>3) {        echo $string;        echo ''<br>'';    }}

但是我只是剥离了不带标签的字符串,例如:

CrapCrapTitleDescription

但我想得到:

<tr>   <td>Crap</td></tr><tr>   <a href="link">title</a></tr>

如何保留html节点(标签)?

答案1

小编典典

如果您想使用DOM,则必须了解这个概念。DOM文档中的所有内容(包括DOMDocument)都是一个节点。

DOMDocument是节点的分层树结构。它从根节点开始。该根节点可以有子节点,所有这些子节点都可以自己拥有子节点。基本上,a
DOMDocument中的所有内容都是某种节点类型,无论是元素,属性还是文本内容。

          HTML                               Legend:          /    \                              UPPERCASE = DOMElement       HEAD  BODY                            lowercase = DOMAttr      /          \                           "Quoted"  = DOMText    TITLE        DIV - class - "header"     |             \"The Title"        H1                    |           "Welcome to Nodeville"

上图显示了带有某些节点的DOMDocument。有一个带有两个子元素(HEAD和BODY)的根元素(HTML)。连接线称为轴。如果将轴跟随到TITLE元素,您将看到它具有一个DOMText叶。这很重要,因为它说明了一个经常被忽视的事情:

<title>The Title</title>

不是一个,而是两个节点。带有DOMText子级的DOMElement。同样,这

<div>

实际上是三个节点:带有DOMAttr的DOMElement持有DOMText。由于所有这些都从DOMNode继承其属性和方法,因此必须熟悉DOMNode类。

实际上,这意味着您获取的DIV已链接到文档中的所有其他节点。您可以随时移至根元素或向下移至叶子。都在那里。您只需要查询或遍历文档以获取所需信息。

无论你做的是通过遍历childNodes中的DIV或使用getElementByTagName()或XPath是你。您只需要了解您不是在使用原始HTML,而是使用代表整个HTML文档的节点。

如果需要有关从文档中提取特定信息的帮助,则需要澄清要从文档中获取哪些信息。例如,您可以询问如何从表中获取所有链接,然后我们可以回答以下问题:

$div = $dom->getElementById(''showContent'');foreach ($div->getElementsByTagName(''a'') as $link) {    echo $dom->saveXML($link);}

但是除非您更具体,否则我们只能猜测哪些节点可能是相关的。

document.write PHP XML操作类DOMDocument

document.write PHP XML操作类DOMDocument

DOMDocument PHP内存泄漏

DOMDocument PHP内存泄漏

在MAC上的MAMP下运行 PHP 5.3.6,内存使用量会增加每x次调用(3到8之间),直到脚本因内存耗尽而死亡.我该如何解决?
libxml_use_internal_errors(true);
while(true){
 $dom = new DOMDocument();
 $dom->loadHTML(file_get_contents('http://www.ebay.com/'));
 unset($dom);
 echo memory_get_peak_usage(true) . '<br>'; flush();
}
使用libxml_use_internal_errors(true);抑制错误输出但建立连续的错误记录,并附加到每个循环上.禁用内部日志记录并禁止PHP警告,或清除每个循环迭代的内部日志,如下所示:
<?PHP
libxml_use_internal_errors(true);
while(true){
 $dom = new DOMDocument();
 $dom->loadHTML(file_get_contents('ebay.html'));
 unset($dom);
 libxml_use_internal_errors(false);
 libxml_use_internal_errors(true);
 echo memory_get_peak_usage(true) . "\r\n"; flush();
}
?>

PHP DomDocument HTML操作

PHP DomDocument HTML操作

我有以下HTML.

<div id="container">
    <div id="current">Current Div</div>
</div>

我在PHP中使用DomDocument,试图在id为“ current”的div之前向HTML添加一个额外的div.

<div id="container">
    <div id="new">New Div</div>
    <div id="current">Current Div</div>
</div>

当我使用以下代码时,似乎在div内添加了div,其ID为“ current”,但在该div的内容之前.有人可以告诉我这是为什么,以及如何获得类似于上述HTML的结果? (请参见下面的HTML问题)

当前的PHP

$doc = new DOMDocument();
$doc->formatOutput = true;

$doc->loadHTMLFile('index.html');

$head = $doc->getElementById('current');
$base = $doc->createElement('div', 'New Div');
$base->setAttribute('id', 'new');
echo $doc->saveHTML();

HTML问题

<div id="container">
    <div id="current">
        <div id="new">New Div</div>
        Current Div
    </div>
</div>

编辑:

的PHP

$doc = new DOMDocument();
$doc->formatOutput = true;

$doc->loadHTMLFile('index.html');
$container = $doc->getElementById('container');
$current = $doc->getElementById('username');
$new = $doc->createElement('div', 'New Div');

$new->setAttribute('id', 'new');
$container->insertBefore($new, $current);
echo $doc->saveHTML();

的HTML

<div id="container">
    <form method="post" action="">
        <input type="text" name="username" id="username" />
    </form>
</div>

错误:

Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' 
in index.PHP:55 Stack trace: #0 index.PHP(55): 
DOMNode->insertBefore(Object(DOMElement), Object(DOMElement))

解决方法:

您可以使用DOMNode::insertBefore()

<?PHP

$doc = new DOMDocument();
$doc->formatOutput = true;
$doc->loadHTMLFile('index.html');

$container = $doc->getElementById('container');
$current = $doc->getElementById('current');
$new = $doc->createElement('div', 'New Div');

$new->setAttribute('id', 'new');
$container->insertBefore($new, $current);

var_dump($doc->saveHTML());

这样产生:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
    <body>
        <div id="container">
            <div id="new">New Div</div>
            <div id="current">Current Div</div>
        </div>
    </body>
</html>

希望这可以帮助 :)

编辑

关于您报告的问题…我看到了问题:input#username不是div#container的直接子代,它是form的直接子代.因此,您需要将form元素作为DOMNode对象而不是其父div#container来获取.最简单的方法是在表单中添加一个ID,然后执行以下操作:

$form = $doc->getElementById('form');
$username = $doc->getElementById('username');
$username->setAttribute('value', 'Enter username!');

var_dump($doc->saveHTML());

这是基于以下HTML.请注意,表单元素具有一个ID:

<div id="container">
    <form id="form" method="post" action="">
        <input type="text" name="username" id="username">
    </form>
</div>

如果由于某种原因无法将id添加到form元素,则可以像这样从div#container遍历:

// find div#container element
$container = $doc->getElementBy('id');
// find all form elements that are children of div#container
$forms = $container->getElementsByTagName('form');

if (0 !== $forms->length) {
   $form = $forms->item(0);
}

// etc.

编辑#2

我差点忘了XPath …如果您想变得更简洁/喜欢冒险,可以使用DOMXPath::query()查找DOM节点:

$xpath = new DOMXPath($doc);
$form  = $xpath->query('body/div[@id="container"]/form')->item(0);
$input = $xpath->query('body//input[@id="username"]')->item(0);

XPath查询语法非常隐秘但功能强大,我不能以任何方式说自己是专家,所以我不能说这些查询的效率.另外,您可能想添加错误检查-查询方法返回具有length属性的DOMNodeList.

最后,值得注意的是DOMDocument用DOCTYPE和html和body标签装饰HTML片段.这就是XPath查询从正文遍历的原因.

php domdocument 找不到怎么办

php domdocument 找不到怎么办

php domdocument找不到的解决办法:1、执行“sudo apt-get install php-dom”命令;2、执行“yum install php-xml”命令。

php domdocument 找不到怎么办

本文操作环境:ubuntu 16.04系统、php5.3版,DELL G3电脑

具体问题:

php - 找不到 ''DOMDocument''类

我在Magento应用程序的页面上发现错误;当我访问它时,它总是显示此消息错误:

立即学习“PHP免费学习笔记(深入)”;

Fatal error: Class &#39;DOMDocument&#39; not found in /home/.../lib/Zend/Feed/Abstract.php on line 95
登录后复制

你能给我一个解决方案吗?我正在使用magento 1.4.1.1。

解决办法:

您需要安装DOM扩展。您可以使用以下命令在Debian/Ubuntu上执行此操作:

sudo apt-get install php-dom
登录后复制

在Centos/Fedora/Red Hat上:

yum install php-xml
登录后复制

如果您发现PHP软件包之间存在冲突,则可以尝试查看特定的PHP版本软件包是否存在: php53-xml(如果您的系统运行PHP5.3)。

推荐学习:《PHP视频教程》

以上就是php domdocument 找不到怎么办的详细内容,更多请关注php中文网其它相关文章!

关于PHP中的DOMDocumentPHP中的PEAR是什么的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于document.write PHP XML操作类DOMDocument、DOMDocument PHP内存泄漏、PHP DomDocument HTML操作、php domdocument 找不到怎么办等相关内容,可以在本站寻找。

本文标签: