我有一个xml文件:
<?xml version="1.0" encoding="utf-8"?>
<pluginlist>
<plugin>
<pid>1</pid>
<pluginname>ChatLogger</pluginname>
<includepath>pugings/</includepath>
<cmds>say
</cmds>
<cmds>sayteam</cmds>
<cmds>tell</cmds>
</plugin>
</pluginlist>
一个PHP是这样的:
<?php
$xml_pluginfile="pluginlist.xml";
if(!$xml=simplexml_load_file($xml_pluginfile)){
trigger_error('Error reading XML file',E_USER_ERROR);
}
foreach($xml as $plugin){
echo $plugin->pid." : ";
foreach($plugin->cmds as $value)
{
echo $value." ". strlen(value)."<br />";
}
echo "<br />";
}
?>
我得到的输出是:
1 : say 5
sayteam 5
tell 5
为什么我将每个输出的长度都设为5?
当我尝试这样做时:
if($value)=="say"
为什么会这样?
请帮帮我 感谢
答案 0 :(得分:2)
<cmds>say
</cmds>
上面粘贴的XML文件在“说”之后和“</cmds>
”之前有一个“\ n \ t”,所以它们是2个额外的字符。
\ n表示换行 \ t for tab
你可以使用“trim()”来清理它们。
EDIT ::
总是错过了
你的陈述
echo $value." ". strlen(value)."<br />";
它应该是$ value而不是strlen()中的值;
:)
答案 1 :(得分:1)
这是因为其中一个<cmds>
标签中有空格。您可以通过删除空格或将以下内容用于PHP代码来解决此问题:
foreach($plugin->cmds as $value)
{
$value = trim($value); // removes whitespace from the start or end of
// the string
// ...
}
另外:strlen(value)
也应更改为strlen($value)
。
答案 2 :(得分:0)
错误是strlen()有一个文字字符串作为输入而不是变量;你错过了以$为前缀的价值。
用这个替换你的回声:
echo $value . " " . strlen($value) . "<br />";
希望它有所帮助。