使用PHP

时间:2019-02-02 16:32:39

标签: php xml

所以,这似乎是一个愚蠢的问题,但我找不到它的一个例子。 我正在寻找的是一种无需知道名称或属性或关于硬编码的文件内容就可以更新XML文件的方法。

我打算如何执行此操作,是我有php读取xml文件,并为每个名称+属性组合ex创建一个带有文本字段的html表单:

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

如果加载了这样的内容,它将看起来像这样:

Example generated HTML

所以从这里说我更改了一个值并单击了更新值,我可以将任何信息传递给下一个函数,例如属性名称,xml树的节点或整个节点/父组合。因为它将是大量嵌套的XML文件。

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

1 个答案:

答案 0 :(得分: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();

因此这将Blue属性设置为10并输出结果XML ...

<?xml version="1.0"?>
<Tools>
        <RangeScrew Red="255" Green="192" Blue="10"/>
        <RangeRing Red="255" Green="192" Blue="203"/>
</Tools>