将单个变量与attributes()进行比较的if条件的结果

时间:2017-08-28 18:05:13

标签: php xml xls

我试图从w3schools.com了解以下示例:https://www.w3schools.com/xml/xsl_editxml.asp

在PHP代码中找到了让我最困惑的一行:

if($key == $x->attributes())

我发现attributes()会生成一组属性名称及其对应的值。上面的if语句显然只对属性名称感兴趣。 if语句是否为,即使只有一个属性名称等于$key吗?

另一个问题。在相同的PHP代码中,有以下行

$xmlLoad->asXML($xml);

有人可以解释为什么后者被添加?

1 个答案:

答案 0 :(得分:1)

我并不感到惊讶,这个例子让你很困惑。我希望我能把它清理一下。您可能希望manual更好地解释这些步骤: $xml是xml文件的名称,而不是人们可能期望的字符串表示。

function updateFile($xml) {
  $xmlLoad = simplexml_load_file($xml);
永远不会使用

$postKeys。您可以忽略或删除该行。

  $postKeys = array_keys($_POST);

children()返回SimpleXMLElement,但该类是可遍历的。即你可以像'数组'一样使用它(对所有数组操作都不正确

  foreach($xmlLoad->children() as $x) { 
    foreach($_POST as $key=>$value) { 

attribues()返回另一个SimpleXMLElement,而不是字符串。感谢type jugglingloose comparison(==)和SimpleXMLElement的神奇__toString(),if工作正常。

      if($key == $x->attributes()) { 
        $x->value = $value;
  }}} 

如果您传递文件名,asXML()不会返回XML内容,而是将其写入文件。记住`$ xml是一个文件名。下一行再次读取文件。

  $xmlLoad->asXML($xml);
  loadFile($xml,"tool_updated.xsl");
}