使用 simplexml_load_file() 加载 XML 时的警告
Posted
技术标签:
【中文标题】使用 simplexml_load_file() 加载 XML 时的警告【英文标题】:Warnings when loading XML using simplexml_load_file() 【发布时间】:2016-09-02 04:59:04 【问题描述】:我有一个名为 po.xml 的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<DOCUMENT xmlns="po.xsd">
<PO>
<HEADER>
<PO_CODE/>
<PO_NAME/>
<REFF_NO/>
</HEADER>
<DETAIL>
<CONT>
<NO_CONT/>
<UK_CONT/>
<NO_SEGEL/>
<JNS_CONT/>
<ISO_CODE/>
</CONT>
<DETAIL>
</PO>
</DOCUMENT>
当我使用以下 php 脚本加载文件时:
$XML = simplexml_load_file('po.xml');
我收到以下警告:
警告:simplexml_load_file(): po.xml:2: namespace warning : xmlns: URI po.xsd >在第 3 行的 C:\xampp\htdocs\inventory\po.php 中不是绝对的
警告:simplexml_load_file():在第 3 行的 C:\xampp\htdocs\inventory\po.php 中
警告:simplexml_load_file(): ^ in C:\xampp\htdocs\inventory\po.php on line >3');
我想将 po.xml 的 XML 结构回显为字符串。
【问题讨论】:
【参考方案1】:此示例 xml 无效。尝试关闭<DETAIL>
标签。
【讨论】:
【参考方案2】:您的 xml 中有两个错误
首先,xmlns="po.xsd"
应该使用绝对路径。
来自libxml网页http://www.xmlsoft.org/namespaces.html:
命名空间值必须是绝对 URL,但该 URL 不必指向 Web 上的任何现有资源。
这里已经讨论过这个问题:Error loading xml in php (not absolute)
如果您使用xmlns="http://www.example.com/po.xsd"
之类的内容删除或修复此部分,它应该可以工作。
正如 Jeff Pucket 所说,您的标签 <DETAIL>
应该关闭
<DETAIL>
<CONT>
<NO_CONT/>
....
</CONT>
</DETAIL>
【讨论】:
以上是关于使用 simplexml_load_file() 加载 XML 时的警告的主要内容,如果未能解决你的问题,请参考以下文章
PHP:simplexml_load_file 从使用 UTF-8 编码的 XML 文件中获取奇怪的字符
XML - simplexml_load_file - foreach
Simplexml_load_file():I/O 警告:未能加载外部实体“”
simplexml_load_file 和 simplexml_load_string 之间的区别