请检查此波纹管程序。
::方案::
<?php
$xml='
<books>
<book>
<name>Java complete reference</name>
<cost>256</cost>
</book>
<book>
<name>Head First PHP and Mysql</name>
<cost>389</cost>
</book>
</books>';
$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;'在实体中找不到
这是正确的方法吗?
如果它是正确的,有没有办法在不将<
更改为<
和>
到>
的情况下获得正确的结果?
答案 0 :(得分:3)
您不应该在表示XML的字符串中实际使用XML标记的事物上使用<
和>
的字符实体。它应该是这样的:
$xml='
<books>
<book>
...
这样做,警告就消失了。
当<
和>
成为实际数据的一部分而不是分隔XML标记时,您只需要使用字符实体。
答案 1 :(得分:3)
DOMDocument期望字符串为VALID xml。
您的字符串不是有效的XML字符串。您应该使用<
代替<
为什么你会在那个字符串中有htmlentities?
答案 2 :(得分:2)
你不应该从这样的事情开始
<?xml version="1.0" encoding="UTF-8" ?>
创建有效的XML?这可能是您的错误所讨论的缺失的开始标记。
答案 3 :(得分:2)
谢谢大家。刚才我尝试了“html_entity_decode()”方法。这个例子对我有用。
::代码::
<?php
$xml='
<books>
<book>
<name>Java complete reference</name>
<cost>256</cost>
</book>
<book>
<name>Head First PHP and Mysql</name>
<cost>389</cost>
</book>
</books>';
$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);
?>