【问题标题】:Is this correct XML formatting for PHP parsing?这是用于 PHP 解析的正确 XML 格式吗?
【发布时间】:2012-02-10 16:30:30
【问题描述】:

以下格式对于 XML 是否正确?我正在尝试使用 simplexml_load_file 解析 PHP 中的文件,但一直收到错误消息,指出“第 3 行文档末尾有额外内容”。

这是 XML 文件:

<?xml version="1.0"?>
  <title>Test File</title>
  <data>
    <record id="1">
      <department>
        <name>ACME</name>
        <number>5</number>
      </dep_name>
      <floor>
        <name>ACME Floor</name>
        <number>5</number>
      </floor>
    </record>
  </data>

【问题讨论】:

  • 您打开了&lt;department&gt;,但关闭了&lt;/dep_name&gt;
  • 噢,不要修改 OP,它会混淆其他读者和有同样问题的谷歌人

标签: php xml parsing simplexml


【解决方案1】:

XML 文档必须由单个根元素及其后代组成。

您的第一个开始标签是&lt;title&gt;。它有一个文本节点作为其唯一的后代。然后你有一个 &lt;/title&gt; 标签,它结束了根元素,从而结束了文档。

&lt;data&gt; 以及它后面的所有内容都是错误的。

您可能希望创建一个新元素类型作为根(并用它包装整个文档,不包括 XML 声明)。

您还需要更正&lt;department&gt;&lt;/dep_name&gt;,因为您似乎在创建元素的中途更改了它的名称。

您应该通过a validatorlint 运行您的代码,因为这会突出显示错误。

【讨论】:

  • 嗯,好吧,所以在这种情况下,只要我创建一个封装&lt;title&gt;&lt;data&gt; 的新标签,它就能正确解析。
  • 是的,这就是我所说的“你可能想要创建一个新的元素类型作为根”的意思。
【解决方案2】:

你的结构需要有根:

<?xml version="1.0"?>
<xml>
    <title>Test File</title>
    <data>
        <record id="1">
            <department>
                <name>ACME</name>
                <number>5</number>
            </department>
            <floor>
                <name>ACME Floor</name>
                <number>5</number>
            </floor>
        </record>
    </data>
</xml>

否则您的 XML 解析器会认为您的根是 &lt;title&gt;,并且其中包含了您的所有信息。

另外,&lt;department&gt; 需要被&lt;/department&gt; 关闭,这已反映在我的回答中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2023-03-19
    • 2021-12-30
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多