所以,这似乎是一个愚蠢的问题,但我找不到它的一个例子。我所寻找的是更新XML文件,无需了解每说的文件进行硬编码的名称或属性或任何一种方式。
如何我打算这样做,是我让PHP读取XML文件,并创建为每个名称+ attribue组合前文本字段的HTML表单:
<Tools>
<RangeScrew Red="255" Green="192" Blue="203"/>
<RangeRing Red="255" Green="192" Blue="203"/>
</Tools>
如果加载这样的事情,它会是这个样子:
所以从这里说,我改变了价值之一,并点击更新值,我可以传递任何信息到下一个功能,如属性的名称,XML树的节点,或整个节点/父组合。由于这将是严重嵌套的XML文件。
有一吨的例子,人们硬编码的路径,这些节点更新它们,但我不能找到一个动态的方式。任何建议,如果我想更新?让说,如果我给的例子中嵌套了好深。
你可以用SimpleXML做什么和更新在任何位置的元素很简单的一个例子。
所以,如果你想更新<RangeScrew>
的蓝色属性的值,可以存储/Tools/RangeScrew/@Blue
的路径,它定义了它与@
表示属性层次结构(这也恰好是一个XPath表达式)。然后,您可以用它来查找数值进行更新。
$source = '<Tools>
<RangeScrew Red="255" Green="192" Blue="203"/>
<RangeRing Red="255" Green="192" Blue="203"/>
</Tools>';
$path = "/Tools/RangeScrew/@Blue";
$value = "10";
$xml = simplexml_load_string($source);
// xpath returns a list of matches, so use [0] to get the first entry
$element = $xml->xpath($path)[0];
// Update the value (using [0] calls the magic method which allows you to set
// the value
$element[0] = $value;
echo $xml->asXML();
所以,这台蓝属性为10,并输出生成的XML ...
<?xml version="1.0"?>
<Tools>
<RangeScrew Red="255" Green="192" Blue="10"/>
<RangeRing Red="255" Green="192" Blue="203"/>
</Tools>