动态更新XML与PHP

问题描述 投票:0回答:1

所以,这似乎是一个愚蠢的问题,但我找不到它的一个例子。我所寻找的是更新XML文件,无需了解每说的文件进行硬编码的名称或属性或任何一种方式。

如何我打算这样做,是我让PHP读取XML文件,并创建为每个名称+ attribue组合前文本字段的HTML表单:

<Tools>
        <RangeScrew Red="255" Green="192" Blue="203"/>
        <RangeRing Red="255" Green="192" Blue="203"/>
</Tools>

如果加载这样的事情,它会是这个样子:

Example generated HTML

所以从这里说,我改变了价值之一,并点击更新值,我可以传递任何信息到下一个功能,如属性的名称,XML树的节点,或整个节点/父组合。由于这将是严重嵌套的XML文件。

有一吨的例子,人们硬编码的路径,这些节点更新它们,但我不能找到一个动态的方式。任何建议,如果我想更新?让说,如果我给的例子中嵌套了好深。

php xml
1个回答
0
投票

你可以用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>
© www.soinside.com 2019 - 2024. All rights reserved.