【问题标题】:Updating XML dynamically with PHP使用 PHP 动态更新 XML
【发布时间】:2019-02-02 16:32:38
【问题描述】:

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

我打算如何做到这一点,我是否有读取 xml 文件的 php,并为每个名称 + 属性组合创建一个带有文本字段的 html 表单:

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

如果它加载了这样的东西,它会看起来像这样:

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

有很多例子,人们对这些节点的路径进行硬编码以更新它们,但我找不到动态的方法。如果我想更新,有什么建议吗?假设我给出的示例嵌套了好几层。

【问题讨论】:

  • “我正在寻找的是一种更新 XML 文件的方法,而无需知道文件的名称或属性或任何关于硬代码的文件。”听起来很复杂,这也意味着对人工智能进行编程来获得那个……此外,您知道 XML 代表可扩展标记语言,对吗?如果不使用固定规则来解析来自可扩展..的信息,你将如何编程?
  • 获取所有表单数据并从中重建 xml。你不能做什么?
  • SimpleXML API 将不起作用@dmasi 如果没有更新或删除现有 XML 文档中的任何东西的方法,它只能添加.. topicstarter 需要查看DOMDocument API
  • @RaymondNijland DOMDocument 非常适合进行详细控制(在特定位置插入元素等)。SimpleXML 非常粗糙 - 但 Simple 并假定一定数量的“魔术”方法可以获取数据。跨度>

标签: php xml


【解决方案1】:

一个非常简单的示例,说明您可以使用 SimpleXML 做什么并在任何位置更新元素。

所以如果你想更新&lt;RangeScrew&gt;的Blue属性的值,你可以存储/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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2010-09-15
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多