PHP未定义名称的方法,php – 未定义名称空间前缀.如何自动定义/忽略错误?

我创建了一个解析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看起来像:

edf:represent =“false”会导致错误.

我不想手动删除edf名称空间前缀,因为这不是我想要解析的唯一XML文件.有数百个,而且数量正在上升.

所以,我的问题是,如何忽略此错误(仅适用于XML命名空间)或如何通过DOMDocument类定义/删除命名空间前缀?

解决方法:

这是一个警告而不是错误.所以XML仍然可以使用,但它已被破坏.最好的解决方案是修复XML – 定义命名空间.

定义namesapce将不会自动运行.名称空间前缀只是别名,实际名称空间是xmlns属性的值.别名仅对元素及其后代有效.必须修复生成XML的脚本/应用程序,以便添加命名空间定义.

解析器将解析命名空间.您可以将“edf:represent”视为“{urn:example}表示”.

但是,您可以使用libxml_use_internal_errors()阻止解析错误和警告.

$xml = <<

XML;

libxml_use_internal_errors(TRUE);

$dom = new DOMDocument();

$dom->loadXml($xml);

echo $dom->saveXml();

输出:

使用libxml_get_errors(),您可以实现自己的错误处理.

正如您在输出中看到的那样,XML解析器删除了名称空间前缀.这意味着“表示”现在是没有命名空间的属性,它改变了它的身份.要非常小心,代表和{urn:example}代表两个不同的名称,你松开相关的上下文信息.

标签:php,xml-parsing,xml,xml-namespaces

来源: https://codeday.me/bug/20190608/1200964.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值