php – 未定义名称空间前缀.如何自动定义/忽略错误?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 未定义名称空间前缀.如何自动定义/忽略错误?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1744字,纯文字阅读大概需要3分钟。
内容图文
![php – 未定义名称空间前缀.如何自动定义/忽略错误?](/upload/InfoBanner/zyjiaocheng/810/00fbca6fdecf475e8ed42d9f805584bc.jpg)
我创建了一个解析XML文件的PHP脚本,当我尝试解析它时,出现错误:
2: DOMDocument::load(): Namespace prefix edf for represent on info is
not defined in
/users/zzz/testing/meta.xml,
line: 2
我一直在寻找修复,但我找不到,所以我在这里发帖.正如您所看到的,我正在使用DOMDocument类.
我解析XML的代码如下:
$dom = new DOMDocument();
$metaXML = $dom->load($path."/meta.xml");
我确定,道路和一切都是正确的.当我删除前缀,它工作正常. XML看起来像:
<meta>
<info gamemodes="race" type="map" edf:represent="false"></info>
</meta>
edf:represent =“false”会导致错误.
我不想手动删除edf名称空间前缀,因为这不是我想要解析的唯一XML文件.有数百个,而且数量正在上升.
所以,我的问题是,如何忽略此错误(仅适用于XML命名空间)或如何通过DOMDocument类定义/删除命名空间前缀?
解决方法:
这是一个警告而不是错误.所以XML仍然可以使用,但它已被破坏.最好的解决方案是修复XML – 定义命名空间.
定义namesapce将不会自动运行.名称空间前缀只是别名,实际名称空间是xmlns属性的值.别名仅对元素及其后代有效.必须修复生成XML的脚本/应用程序,以便添加命名空间定义.
<meta xmlns:edf="urn:example">
<info gamemodes="race" type="map" edf:represent="false"></info>
</meta>
解析器将解析命名空间.您可以将“edf:represent”视为“{urn:example}表示”.
但是,您可以使用libxml_use_internal_errors()阻止解析错误和警告.
$xml = <<<'XML'
<meta>
<info gamemodes="race" type="map" edf:represent="false"></info>
</meta>
XML;
libxml_use_internal_errors(TRUE);
$dom = new DOMDocument();
$dom->loadXml($xml);
echo $dom->saveXml();
输出:
<?xml version="1.0"?>
<meta>
<info gamemodes="race" type="map" represent="false"/>
</meta>
使用libxml_get_errors(),您可以实现自己的错误处理.
正如您在输出中看到的那样,XML解析器删除了名称空间前缀.这意味着“表示”现在是没有命名空间的属性,它改变了它的身份.要非常小心,代表和{urn:example}代表两个不同的名称,你松开相关的上下文信息.
内容总结
以上是互联网集市为您收集整理的php – 未定义名称空间前缀.如何自动定义/忽略错误?全部内容,希望文章能够帮你解决php – 未定义名称空间前缀.如何自动定义/忽略错误?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。