PHP错误:DOMDocument :: loadXML()[domdocument.loadxml]:期望开始标记,'<'在实体中找不到

时间:2011-11-25 13:56:14

标签: domdocument php

请检查此波纹管程序。

::方案::

      <?php
      $xml='
      &lt;books&gt;
           &lt;book&gt;
                &lt;name&gt;Java complete reference&lt;/name&gt;
                &lt;cost&gt;256&lt;/cost&gt;
           &lt;/book&gt;

           &lt;book&gt;
                &lt;name&gt;Head First PHP and Mysql&lt;/name&gt;
                &lt;cost&gt;389&lt;/cost&gt;
           &lt;/book&gt;
      &lt;/books&gt;';


      $dom=new DOMDocument();
      $dom->loadXML($xml);
      foreach ($dom->getElementsByTagName('book') as $book)
      {
              foreach($book->getElementsByTagName('name') as $name)
              {
                   $names[]=$name->nodeValue;
              }

              foreach($book->getElementsByTagName('cost') as $cost)
              {
                   $costs[]=$cost->nodeValue;
              }
      }
      print_r($names);
      ?>

显示错误:

  

DOMDocument :: loadXML()[domdocument.loadxml]:期望开始标记,'&lt;'在实体中找不到

这是正确的方法吗?

如果它是正确的,有没有办法在不将&lt;更改为<&gt;>的情况下获得正确的结果?

4 个答案:

答案 0 :(得分:3)

您不应该在表示XML的字符串中实际使用XML标记的事物上使用<>的字符实体。它应该是这样的:

$xml='
  <books>
       <book>
...

这样做,警告就消失了。

<>成为实际数据的一部分而不是分隔XML标记时,您只需要使用字符实体。

答案 1 :(得分:3)

DOMDocument期望字符串为VALID xml。

您的字符串不是有效的XML字符串。您应该使用<代替&lt;

为什么你会在那个字符串中有htmlentities?

答案 2 :(得分:2)

你不应该从这样的事情开始

<?xml version="1.0" encoding="UTF-8" ?>

创建有效的XML?这可能是您的错误所讨论的缺失的开始标记。

答案 3 :(得分:2)

谢谢大家。刚才我尝试了“html_entity_decode()”方法。这个例子对我有用。

::代码::

      <?php
      $xml='
      &lt;books&gt;
           &lt;book&gt;
                &lt;name&gt;Java complete reference&lt;/name&gt;
                &lt;cost&gt;256&lt;/cost&gt;
           &lt;/book&gt;

           &lt;book&gt;
                &lt;name&gt;Head First PHP and Mysql&lt;/name&gt;
                &lt;cost&gt;389&lt;/cost&gt;
           &lt;/book&gt;
      &lt;/books&gt;';


      $xml=html_entity_decode($xml);




      $dom=new DOMDocument();
      $dom->loadXML($xml);
      foreach ($dom->getElementsByTagName('book') as $book)
      {
              foreach($book->getElementsByTagName('name') as $name)
              {
                   $names[]=$name->nodeValue;
              }

              foreach($book->getElementsByTagName('cost') as $cost)
              {
                   $costs[]=$cost->nodeValue;
              }
      }
      print_r($names);
      ?>