使用 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 无效。尝试关闭&lt;DETAIL&gt; 标签。

【讨论】:

【参考方案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 所说,您的标签 &lt;DETAIL&gt; 应该关闭

<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 之间的区别

当我尝试做 simplexml_load_file 时出现 XML 错误

simplexml_load_file 抑制警告的直接输出