PHP xmlreading和strlen / if语句错误

时间:2011-06-29 17:17:32

标签: php xml simplexml

我有一个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"

为什么会这样?

请帮帮我 感谢

3 个答案:

答案 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 />";

希望它有所帮助。