gpt4 book ai didi

php - 是否有适用于 PHP 的松散、宽松的 XML 解析器?

转载 作者:可可西里 更新时间:2023-11-01 12:37:16 25 4
gpt4 key购买 nike

我正在寻找一个能够让我成功解析损坏的 xml 的解析器,例如采用“最佳猜测”方法。

    <thingy>
<description>
something <b>with</b> bogus<br>
markup not wrapped in CDATA
</description>
</thingy>

理想情况下,它会产生一个东西,带有描述属性和里面的任何标签汤。

欢迎提出有关如何解决问题的其他建议(除了开始时使用有效标记)。

非 php 解决方案(例如 Beautiful Soup(python))并非无可厚非,但我更愿意坚持公司的主流技能组合

谢谢!

最佳答案

你可以使用 DOMDocument::loadHTML() (或 DOMDocument::loadhtmlfile())将损坏的 XML 转换为正确的 XML。如果您不喜欢处理 DOMDocument 对象,则使用 saveXML() 并使用 SimpleXML 加载生成的 XML 字符串。

$dom = DOMDocument::loadHTMLfile($filepath);
if (!$dom)
{
throw new Exception("Could not load the lax XML file");
}
// Now you can work with your XML file using the $dom object.


// If you'd like using SimpleXML, do the following steps.
$xml = new SimpleXML($dom->saveXML());
unset($dom);

我试过这个脚本:

<?php
$dom = new DOMDocument();
$dom->loadHTMLFile('badformatted.xml');
if (!$dom)
{
die('error');
}
$nodes = $dom->getElementsByTagName('description');
for ($i = 0; $i < $nodes->length; $i++)
{
echo "Node content: ".$nodes->item($i)->textContent."\n";
}

从 CLI 执行此操作时的输出:

carlos@marmolada:~/xml$ php test.php

Warning: DOMDocument::loadHTMLFile(): Tag thingy invalid in badformatted.xml, line: 1 in /home/carlos/xml/test.php on line 3

Warning: DOMDocument::loadHTMLFile(): Tag description invalid in badformatted.xml, line: 2 in /home/carlos/xml/test.php on line 3
Node content:
something with bogus
markup not wrapped in CDATA

carlos@marmolada:~/xml$

编辑:一些小的更正和错误处理。

edit2:更改为非静态调用以避免 E_STRICT 错误,添加了测试用例。

关于php - 是否有适用于 PHP 的松散、宽松的 XML 解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6031546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com