domdocument 相关问题

DOMDocument是指封装DOM(文档对象模型)的类。各种语言和技术对此PHP,COM,C ++,ActiveX使用名称DOMDocument

如何使用 VBA 和 MSXML2 通过 Xpath 进行搜索?

我想使用 XPath 表达式从网站获取元素。我使用内置的 Microsoft 库 MSXML2 来执行此操作,但没有 getElementByXpath() 方法。我发现这非常有趣...

回答 1 投票 0

如何计算 DOMNodeList 中的子节点数量? PHP

我正在尝试计算 DOMNode 的子节点。当我使用计数与遍历或 ->length 属性时,它似乎给出了错误的结果。就好像文本节点没有被计算在内。 考虑 我正在尝试计算 DOMNode 的孩子。当我使用 count 与遍历或 ->length 属性时,它似乎给出了错误的结果。就好像文本节点没有被计算在内。 考虑 <?php $html = '<p>with <a>link</a> text</p>'; $dom = new DOMDocument(); $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); $paragraph = $dom->firstChild; $count = 0; foreach ($paragraph->childNodes as $childNode) { $count++; } echo count($paragraph->childNodes) . "\n"; echo $paragraph->childNodes->length . "\n"; echo $count . "\n"; 输出为: 1 3 3 这是 Countable 实现 DOMNodeList 中的错误吗? 据我所知,count()中的DOMNodeList不会计算节点列表中的项目数。相反,它将返回 1,表明该对象是奇异的。 (在某些 PHP 版本中,它可能返回 0)。 另一方面,length的DOMNodeList属性是获取列表中节点数量的正确且可靠的方法。

回答 1 投票 0

在 DOMDOCUMENT PHP 7.4 中的某个单词后插入标签

我有一个使用 DOMDocument 获得的标签 li。它有一个已注册的 URL,我需要将其替换为具有相同 URL 的 a 标记。主要问题是保持位置,即URL是否在...

回答 1 投票 0

php 或 JavaScript。需要从 Domdocument 中获取以字符串形式排序的链接 ID,以用于构建自定义分配的链接

$版本='1.1'; $sortBy = isset($_GET['sortBy']) ? $_GET['sortBy'] : 'PUBLISHED_DESC'; $articleClassName = '相对隔离 sf-搜索-ad 光标-指针溢出-隐藏相对过渡-所有 ou...

回答 1 投票 0

Ubuntu 中的 REDCap - 未捕获错误:未找到“DOMDocument”类

REDCap 由于意外的 PHP 致命错误而崩溃! 错误消息:未捕获错误:找不到类“DOMDocument” redcap_v14.3.0/Classes/RenderProjectList.php:827 堆栈跟踪:#0 redcap_v14.3.0/

回答 1 投票 0

PHP DOMDocument 忽略第一个表的结束标记

我正在编写一个将 HTML 表格转换为 CSV 的工具,我注意到一些奇怪的行为。鉴于此代码 $html = << A玫瑰 我正在编写一个将 HTML 表格转换为 CSV 的工具,我注意到一些奇怪的行为。鉴于此代码 $html = <<<HTML <table> <tr><td>A</td><td>Rose</td></tr> </table> <h1>Leave me behind</h1> <table> <tr><td>By</td><td>Any</td></tr> </table> <table> <tr><td>Other</td><td>Name</td></tr> </table> HTML; $dom = new \DOMDocument(); \libxml_use_internal_errors(true); $dom->loadHTML($html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED); \libxml_clear_errors(); $tables = $dom->getElementsByTagName('table'); $stream = \fopen('php://output', 'w+'); for ($i = 0; $i < $tables->length; ++$i) { $rows = $tables->item($i)->getElementsByTagName('tr'); for ($j = 0; $j < $rows->length; ++$j) { echo trim($rows->item($j)->nodeValue) . PHP_EOL; } } \fclose($stream); 我期望这样的输出: ARose ByAny OtherName 但是我得到的是这样的: ARose ByAny OtherName ByAny OtherName 如果省略第一个结束标签,我会得到相同的结果。看来 DOMDocument 将第二个和第三个 <table> 嵌套在第一个中。 事实上,如果我使用 xpath 仅从每个表中获取直接子项,我会得到正确的输出: $xpath = new \DOMXPath($dom); for ($i = 0; $i < $tables->length; ++$i) { $rows = $xpath->query('./tr', $tables->item($i)); for ($j = 0; $j < $rows->length; ++$j) { echo trim($rows->item($j)->nodeValue) . PHP_EOL; } } 您发布的第一个代码中的 DOMDocument 没有任何问题,它已经忠实地处理了您的 $html 请注意,您将循环遍历所有表,然后为每个表显示节点值 因此,如果您想知道实际发生了什么,请使用以下内容 <?php $html = <<<HTML <table> <tr><td>A</td><td>Rose</td></tr> </table> <h1>Leave me behind</h1> <table> <tr><td>By</td><td>Any</td></tr> </table> <table> <tr><td>Other</td><td>Name</td></tr> </table> HTML; $dom = new \DOMDocument(); \libxml_use_internal_errors(true); $dom->loadHTML($html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED); \libxml_clear_errors(); $tables = $dom->getElementsByTagName('table'); $stream = \fopen('php://output', 'w+'); for ($i = 0; $i < $tables->length; ++$i) { $rows = $tables->item($i)->getElementsByTagName('tr'); echo "Now for table " . $i ."<br>" ; for ($j = 0; $j < $rows->length; ++$j) { echo trim($rows->item($j)->nodeValue) . "<br>"; } echo "<hr>"; } fclose($stream); ?>

回答 1 投票 0

PHP DOMDocument 剪切部分脚本

我尝试用 DOMDocument 解析这样的字符串: $html1 = "document.write('<scr'+'ipt>alert(123);</scr'+'ipt>')"; $dom = new DOMDocument('1.0', 'utf-8...

回答 1 投票 0

如何正确使用 JavaScript DOM 方法替换字符串连接

这是我的活动日历学校作业的第二部分。 老师让我们换掉一些没有使用最佳实践的代码。 任务:通过替换字符串连接来改进他们的代码...

回答 1 投票 0

从所有<a>标签获取href值,包括嵌套的<a>标签

我已经搜索了几个小时(不应该有任何重复)并尝试了许多不同的方法,使用RegEx(正则表达式)和DOMdocument,但没有成功。 非标准 HTML 代码:...

回答 3 投票 0

如何在 PHP 中解析 OFX(版本 1.0.2)文件?

我从花旗银行下载了一个OFX文件,该文件的DTD定义在http://www.ofx.net/DownloadPage/Files/ofx102spec.zip(文件OFXBANK.DTD),OFX文件似乎是SGML有效的。 我正在努力...

回答 4 投票 0

PHP 从 XML 中删除父标签

我有以下 XML,我想删除父标签“trust:RequestedSecurityToken” $xmlString = ' 我有以下 XML,我想删除父标签“trust:RequestedSecurityToken” $xmlString = '<trust:RequestedSecurityToken xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:default="http://www.w3.org/2000/09/xmldsig#" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Type="http://www.w3.org/2001/04/xmlenc#Element"> <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" /> <default:KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <xenc:EncryptedKey xmlns:e="http://www.w3.org/2001/04/xmlenc#"> <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"> <default:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> </xenc:EncryptionMethod> <default:KeyInfo> <o:SecurityTokenReference xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <default:X509Data> <default:X509IssuerSerial> <default:X509IssuerName>ss</default:X509IssuerName> <default:X509SerialNumber>ss</default:X509SerialNumber> </default:X509IssuerSerial> </default:X509Data> </o:SecurityTokenReference> </default:KeyInfo> <xenc:CipherData> <xenc:CipherValue>e/+5KDiAWPJK6Hc3iKQ2cZ/+nQV9h7/+/jC6c0XF8UUNZ+++8wu3i+cqxZOF5213q/5RYxsMmMcKUJaHBQZA/ucC2IZwjWZ7hv2b4W9LBYODRWDUWG4ABIeHph9r/mM+XGLnKM796DEOB8hLzvPieV54pHDhLSOpWQ==</xenc:CipherValue> </xenc:CipherData> </xenc:EncryptedKey> </default:KeyInfo> <xenc:CipherData> <xenc:CipherValue>KiS3+2V71jp5vlq3ND5MtwcfKJmIWrmu5WT+//+Hhyh2ugF7jNT2r4gOUSOe72ryRSvoPyZf0wmN1juImZohRCsWIdyiXGicSxIdWQLmJQJogF3Uz/E85zLdIzslSD4cRg17VbfQl859ZDBcAGd </xenc:CipherValue> </xenc:CipherData> </xenc:EncryptedData> </trust:RequestedSecurityToken> '; 我尝试过以下代码,但它不起作用 $xml = new SimpleXMLElement($xmlString); $trustRequestedSecurityToken = $xml->children('trust', true)->RequestedSecurityToken; unset($trustRequestedSecurityToken[0]); echo $xml->asXML(); 打印相同的 XML 命名空间在 XML 中对于避免命名冲突至关重要。 SimpleXMLElement 需要了解它们才能正确操作。 $xml = new SimpleXMLElement($xmlString); $xml->registerXPathNamespace('trust', 'http://docs.oasis-open.org/ws-sx/ws-trust/200512'); $trustRequestedSecurityToken = $xml->xpath('//trust:RequestedSecurityToken')[0]; unset($trustRequestedSecurityToken[0]); echo $xml->asXML(); registerXPathNamespace 用于将前缀“trust”与正确的命名空间 URI 相关联。这是正确定位元素所必需的。 xpath 方法现在包含“trust:”前缀,用于在指定命名空间内定位 RequestedSecurityToken 元素。 unset() 删除引用的元素。

回答 1 投票 0

如何在 PHP 中将 HTML 表格转换为 JSON

我正在尝试将一些 html 转换为数组,然后转换为 json 字符串。 我正在根据此参考进行开发:https://www.codeproject.com/Tips/1074174/Simple-Way-to-Convert-HTML-Table-Data-into...

回答 2 投票 0

使用domDocument并解析信息,我想获取'a'标签的'href'内容[重复]

这显示了 a 标签之间的内容,但我也想要一种获取 href 内容的方法。 有没有办法使用 domDocument 来做到这一点? $html = file_get_contents($uri); $html = utf8_...

回答 2 投票 0

从包含特定类的 HTML 5 中提取所有 <a> 和 <img> 标签(与输入中所示完全相同)

我需要改进一些开源代码。它包含一个函数,用于从表示 HTML 的字符串中提取具有特定类的所有 和 标签。该函数使用常规

回答 1 投票 0

如何使用 PHP DOMDocument 删除特定的 dom 元素

我的数据库中有这个html: 一些文字1 一些文字2 一些文字3 <...

回答 3 投票 0

PHP - HTML 解析 - 从嵌套在另一个“a”标签内的“a”标签检索 href

我已经搜索了几个小时(不应该有任何重复)并尝试了许多不同的方法,使用RegEx(正则表达式)和DOMdocument,但没有成功。 非标准 HTML 代码:...

回答 2 投票 0

PHP - 解析 html 以从嵌套在另一个“a”标签内的“a”标签中检索 href

我已经搜索了几个小时(不应该有任何重复)并尝试了许多不同的方法,使用RegEx(正则表达式)和DOMdocument,但没有成功。 非标准 HTML 代码:...

回答 2 投票 0

如何使用DomDocument通过id获取值?

我正在尝试使用 DomDocument 获取下面表单的值,但到目前为止仍然失败 我正在尝试使用 DomDocument 获取下面表单的值,但到目前为止仍然失败 <?php $string ='<form action="profile" method="post" enctype="multipart/form-data"> <input type="hidden" name="id_user" id="id_user" value="123"> <input type="hidden" name="logo" id="logo" value="path/to/logo1.png"> <input type="hidden" name="status" id="status" value="Ok"> <input type="submit" value="PROFILE"> </form>'; ?> 这种情况下如何正确使用DomDocument? 我正在尝试下面的代码 $dom = new DomDocument(); $dom->loadHTML($string); $dom->getElementById("id_user"); 我期望得到 123 作为返回值 DomDocument 有点麻烦,但如果您遵循文档,您就可以到达那里。我找到了这条路线: $dom->getElementById("id_user")->attributes->getNamedItem("value")->value 返回: 123 参见:https://onlinephp.io/c/c37dc 可能还有其他方法可以做到同样的事情。

回答 1 投票 0

从下拉列表中选择要传递给变量的选项并使用新的 domDocument 重新加载页面

好的。已经为此奋斗了很长时间了。我有以下代码从添加站点获取 html: $articleClassName = '相对隔离 sf-search-ad 光标指针溢出隐藏相对转换...

回答 1 投票 0

如何防止 DOMDocument 转换为 unicode

我正在尝试获取 PHP 中 DOMElement 的内部 HTML。标记示例: ... 这里有一些 有趣  ... 我正在尝试在 PHP 中获取 DOMElement 的内部 HTML。标记示例: <div>...</div> <div id="target"><p>Here's some &nbsp; <em>funny</em> &nbsp; text</p></div> <div>...</div> <div>...</div> 将上面的字符串输入变量$html,我正在做: $doc = new DOMDocument(); @$doc->loadHTML("<html><body>$html</body></html>"); $node = $doc->getElementById('target') $markup = ''; foreach ($node->childNodes as $child) { $markup .= $child->ownerDocument->saveXML($child); } 生成的 $markup 字符串如下所示(转换为 JSON 以显示不可见字符): "<p>Here's some \u00a0 <em>funny<\/em> \u00a0 text<\/p>" 所有 &nbsp; 字符已转换为 Unicode 不间断空格,这破坏了我的应用程序。 在我的理想世界中,有一种方法可以检索目标 div as-is 中的原始 HTML 字符串,而无需 DomDocument 对其执行任何操作。这似乎不可能,所以下一个最好的办法是以某种方式关闭此字符转换。到目前为止我已经尝试过: 设置$doc->substituteEntities = false;没有结果。将其更改为 true 也没有帮助。 切换$doc->preserveWhiteSpace,任何方式都没有变化 将 saveXML 更改为 saveHTML。没有什么区别。 最后我求助于这个 hack,它有效,但感觉不是正确的解决方案。 $markup = str_replace("\xc2\xa0", '&nbsp;', $markup); 当然有更好的方法吗? 您可以使用正则表达式来查找所有非标准(即不可见的非 ASCII)字符。然后将非常神秘的函数mb_encode_numericentity()应用于这些字符,这样它就不会触及您的标记等: <?php $html = <<< HTML <div>...</div> <div id="target"><p>Here's some &nbsp; <em>funny</em> &nbsp; text</p></div> <div>...</div> <div>...</div> HTML; $doc = new DOMDocument(); libxml_use_internal_errors(); $doc->loadHTML("<html><body>$html</body></html>"); $node = $doc->getElementById('target'); $markup = ''; foreach ($node->childNodes as $child) { $markup .= $child->ownerDocument->saveHTML($child); } $markup = preg_replace_callback( "/[^ -~]/u", fn ($m) => mb_encode_numericentity($m[0], [0x00, 0xff, 0, 0xff], "UTF-8"), $markup ); echo $markup; 输出: <p>Here's some &nbsp; <em>funny</em> &nbsp; text</p> 我也遇到了这个问题,基本上已经描述在这里了。 提供的解决方案对我有用,但只有&nbsp;字符失败了,所以我来到这里。 miken32 提供的解决方案对我不起作用,至少在保存时不起作用,但在加载 html 时不起作用。解决办法是: $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8')); 链接的 stackoverflow 问题和帮助我解决问题的这篇博文中也描述了此解决方案。

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.