也许您可以使用通用 XML 解析器类(也在github 上)。
根据作者的描述:
- 解析任意 XML 输入并构建一个包含所有标签和数据元素结构的数组。
- 它只需一次调用即可验证和提取整个 XML 文档中的数据。它支持验证常见的标签值数据类型,并且可以使用子类执行自定义验证。
- 可选地,跟踪每个元素的位置,以允许确定可能在上下文中出错的元素的确切位置。
- 支持解析后的文件缓存,最大限度地减少重复解析同一个文件的开销。
- 忽略标签属性的简化 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
字段可能是您正在寻找的。
为了更好地理解它的工作原理,还请查看它的源代码。