我有一个xml文件(changes.xml),如下所示:
<changelog>
<version name="1.0.20">
<bug id="5">a</bug>
<bug id="4">b</bug>
<bug id="3">c</bug>
<task id="2">d</task>
</version>
<version name="1.0.19">
<bug id="1">a</bug>
</version>
</changelog>
我用php
这样加载此文件:
$file = "path/to/file/changes.xml";
$version = $_GET['version'];
$xml = simplexml_load_file($file);
$path = "/changelog/version[@name='$version']";
$res = $xml->xpath($path);
$object = $res[0];
$bugs = $object->xpath("bug");
$tasks = $object->xpath("task");
在
之后立即迭代所有节点时 while(list( , $node) = each($bugs)) {
echo "NODE:" . $node . "<br>";
}
我可以打印出来:
NODE:a
NODE:b
NODE:c
但是在html的正文部分,它没有按预期工作:
<?
function h($string) {
return htmlentities($string, ENT_COMPAT, "UTF-8");
}?>
<?='<?xml version="1.0" encoding="utf-8" ?>' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Changelog Version <?=h($version) ?></title>
<style>
li, h1,h2 { font-family: arial; }
</style>
</head>
<body>
<h1>Changelog Version <?=h($version) ?></h1>
<? if($bugs) { ?>
<h2>Bugs:</h2>
<ul>
<? while(list( , $node) = each($bugs)) { ?>
<li>
<?=h($node) ?>
</li>
<? } ?>
</ul>
<? } ?>
</body>
</html>
我只得到一个没有内容的<li></li>
项:
输出源在浏览器中显示如下:
NODE:a<br>NODE:b<br>NODE:c<br>
<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Changelog Version 1.0.20</title>
<style>
li, h1,h2 { font-family: arial; }
</style>
</head>
<body>
<h1>Changelog Version 1.0.20</h1>
<? if($bugs) { ?>
<h2>Bugs:</h2>
<ul>
<? while(list( , $node) = each($bugs)) { ?>
<li>
</li>
<? } ?>
</ul>
<? } ?>
</body>
</html>
我在这里缺少什么?
答案 0 :(得分:0)
如果查看您生成的HTML。它还有PHP。显然,这应该由服务器运行,而不是可见的。
这与XML解析无关,但只是PHP中的一个设置:要使用<?
而不是<?php
,您需要启用the short_open_tags
setting。