这个“非常简单”的simplexml脚本无效

时间:2012-04-21 00:56:10

标签: php xml simplexml

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<pages>
<page>
    <title>Home</title>
    <content>Lorem Ipsum</content>
</page>
<page>
    <title>Pictures</title>
    <content>Lorem Ipsum</content>
</page>
<page>
    <title>Information</title>
    <content>Lorem Ipsum</content>
</page>
</pages>

我的XML

$url = "xml->build.xml";
$xml = simplexml_load_file($url);

$i = 1;

foreach($xml->page as $page) {
    echo "<strong>Page ".$i.":</strong> ".$page->title."<br/>";
    $i++;
}

我的PHP

我得到了:

警告:simplexml_load_file():I / O警告:无法加载外部实体“xml-&gt; build.xml”

只是从那个简单的脚本!有任何想法吗? :)

更新,这是确切的XML文件

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<pages>
<page>
    <title>Home</title>
    <content>Lorem Ipsum</content>
</page>
<page>
    <title>Pictures</title>
    <content>Lorem Ipsum</content>
</page>
<page>
    <title>Information</title>
    <content>Lorem Ipsum</content>
</page>
</pages>
<css>
<css-tag>
    <title>background-color</title>
    <value>#FFF</value>
</css-tag>
</css>
<layout>1</layout>

2 个答案:

答案 0 :(得分:1)

发生这种情况是因为您正在尝试读取不存在的文件。如果您的文件名为build.xml并且存储在与PHP脚本相同的目录中,请替换:

$url = "xml->build.xml";

使用:

$url = dirname(__FILE__) . "/build.xml";

答案 1 :(得分:0)

我不确定为什么会出现这样的错误,但这可能有助于您解决此问题

我认为xml->build.xml不是有效名称,您也可以将其更改为build.xml

$url = "build.xml";
if(!is_file($url))
    die("File Does not exist");

if(!is_readable($url))
    die("File is not readeable");


$xml = simplexml_load_string(file_get_contents($url));
var_dump($xml);

$xml = simplexml_load_file($url);
var_dump($xml);

如果simplexml_load_string肯定有效,simplexml_load_file也会起作用

更新

你的XML错误,格式应该是这样的

$url = '<?xml version="1.0" encoding="ISO-8859-1" ?> 
<doc>
<pages>
<page>
    <title>Home</title>
    <content>Lorem Ipsum</content>
</page>
<page>
    <title>Pictures</title>
    <content>Lorem Ipsum</content>
</page>
<page>
    <title>Information</title>
    <content>Lorem Ipsum</content>
</page>
</pages>
<css>
<css-tag>
    <title>background-color</title>
    <value>#FFF</value>
</css-tag>
</css><layout>1</layout>
</doc>';