我试图从w3schools.com了解以下示例:https://www.w3schools.com/xml/xsl_editxml.asp
在PHP代码中找到了让我最困惑的一行:
if($key == $x->attributes())
我发现attributes()
会生成一组属性名称及其对应的值。上面的if
语句显然只对属性名称感兴趣。 if
语句是否为,即使只有一个属性名称等于$key
吗?
另一个问题。在相同的PHP代码中,有以下行
$xmlLoad->asXML($xml);
有人可以解释为什么后者被添加?
答案 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 juggling,loose comparison(==)和SimpleXMLElement的神奇__toString()
,if工作正常。
if($key == $x->attributes()) {
$x->value = $value;
}}}
如果您传递文件名,asXML()
不会返回XML内容,而是将其写入文件。记住`$ xml是一个文件名。下一行再次读取文件。
$xmlLoad->asXML($xml);
loadFile($xml,"tool_updated.xsl");
}