php - 哪个 HTML 解析器(最好是 PHP)支持获取输入字符串中当前节点的偏移量?

标签 php html-parsing

我正在寻找一种 HTML 或 XML 解析器,它允许访问当前元素的偏移量/位置输入字符串或文件.

例如,如果遍历这个字符串:

<div>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
    <p>sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</div>

我正在寻找一种方法来获取每个 <p> 的起始位置(包括空格)标签,此处:772 .

如果 PHP 解析器本身支持它,那就太好了(我查看了 DOMXMLReaderthis SO question 中提到的其他库,但还没有找到实现它的方法),但是否则任何语言/框架都可以。

注意:与 this question 相关,但本地化程度较低。

最佳答案

也许你可以使用 Generic XML parser class (也在 github 上)。
根据作者的描述:

  • 解析任意 XML 输入并构建一个包含所有标记和数据元素结构的数组。
  • 只需一次调用,它就可以验证整个 XML 文档并从中提取数据。它支持 validationg 通用标签值数据类型,并且可以使用子类执行自定义验证。
  • 可选地,跟踪每个元素的位置,以便确定可能在上下文中出错的元素的确切位置。
  • 支持解析文件缓存,以最大限度地减少重复解析同一文件的开销。
  • 优化了忽略标记属性的简化 XML (SML) 格式的解析。
  • 通过单个函数调用从整个 XML 文档中验证和提取数据

我已经用这段代码测试过了:

<?php

require('xml_parser.php');

$file_name = 'test.xml';
$error = XMLParseFile($parser, $file_name, 1, $file_name.'.cache');

foreach ($parser->structure as $key => $val) {
    if (is_array($val) && isset($val['Tag']) && !strcasecmp($val['Tag'], 'p')) {
        print_r($parser->positions[$key]);
    }
}

?>

test.xml 文件包含您的示例 HTML 片段。
通过从命令行运行脚本,我得到了这个输出:

Array
(
    [Line] => 2
    [Column] => 7
    [Byte] => 12
)
Array
(
    [Line] => 3
    [Column] => 7
    [Byte] => 80
)

所以,Byte 字段可能就是您要查找的内容。
为了更好地了解它的工作原理,还可以查看其 source code。 .

关于php - 哪个 HTML 解析器(最好是 PHP)支持获取输入字符串中当前节点的偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14344977/

相关文章:

PHP : How to remove images in the directory of my website using PHP

php - Apple 推送通知的时长

php - 将缩进列表解析为 bool 树

python - 使用 xpath 访问元素?

python - 使用 BeautifulSoup 导航

python - 错误消息: 'NoneType' object has no attribute 'split'

php - 无法在 laragon 上启动服务 apache

php - 使用 paypal API 创建动态自动计费方法的正确方法?

python - 从 HTML 中选取图像 URL

python - 将从 csv 文件读取的 pandas 数据框列中的 HTML 转换为纯文本