如何在 PHP 中检查字符串是否为有效 XML 而不显示警告
我试图使用 simplexml_load_string()
< 检查 xml 字符串的有效性em>Docs 功能,但它显示很多警告消息。
如何在开头不使用 @
的情况下检查字符串是否为有效的 XML 抑制错误和警告?
i was trying to check the validity of a string as xml using the simplexml_load_string()
Docs function but it displays a lot of warning messages.
How can I check whether a string is a valid XML without using @
at the beginning to suppress the errors and warnings?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
使用
libxml_use_internal_errors()
抑制所有 XML 错误,然后使用libxml_get_errors()
迭代它们。简单 XML 加载字符串
Use
libxml_use_internal_errors()
to suppress all XML errors, andlibxml_get_errors()
to iterate over them afterwards.Simple XML loading string
来自文档:
参考:
libxml_use_internal_errors
From the documentation:
Reference:
libxml_use_internal_errors
我的版本是这样的:
测试:
My version like this:
Tests:
试试这个
try this one
这是我不久前写的一小部分课程:
它可以与流和 vfsStream 配合使用,也可以用于测试目的。
Here a small piece of class I wrote a while ago:
It works fine with streams and vfsStream as well for testing purposes.
案例
偶尔检查 Google Merchant XML feed 的可用性。
该 Feed 没有 DTD,因此
validate()
不起作用。上面的解决方案
length
包含文件中实际列出的产品数量。您可以改用您的标签名称。逻辑
您可以在任何对象上调用
getElementsByTagName()
其他标签名称(item
我使用的是 Google Merchant,您的情况可能会有所不同),或阅读$dom
对象本身的其他属性。逻辑保持不变:我相信实际上尝试操作它(或者专门检查它是否包含您实际需要的值)会更可靠,而不是检查加载文件时是否有错误。最重要的是:与
validate()
不同,这个不要求您的 XML 具有 DTD。Case
Occasionally check availability of a Google Merchant XML feed.
The feed is without DTD, so
validate()
won't work.Solution
length
above contains a number of how many products are actually listed in the file. You can use your tag names instead.Logic
You can call
getElementsByTagName()
on any other tag names (item
I used is for Google Merchant, your case may vary), or read other properties on the$dom
object itself. The logic stays the same: instead of checking if there were errors when loading the file, I believe actually trying to manipulate it (or specifically check if it contains the values you actually need) would be more reliable.Most important: unlike
validate()
, this won't require your XML to have a DTD.解决方案
Solution