如何更改特定的 xml 标记值,其中标记具有 id


How to change specific xml tag value, where tag has an id. Using php

我正在尝试使用 php 更改 xml 文件中的值。 我正在使用php将xml文件加载到这样的对象中。

if(file_exists('../XML/example.xml')) {
            $example = simplexml_load_file('../XML/example.xml');
        }
else {
exit ("can't load the file");
}

然后一旦加载,我就会通过为它们分配另一个变量的内容来更改标签中的值,就像这样......

$example->first_section->second_section->third_section->title = $var['data'];

然后,一旦我进行了必要的更改,文件就会保存。到目前为止,这个过程运作良好,但现在遇到了绊脚石。

我想更改我的 xml 文件中特定标签中的值,该文件具有 id。 在 XML 文件中,它如下所示。

<first_section>
     <second_section>
          <third_section id="2">
               <title>Mrs</title>
          </third_section>
     </second_section>
 </first_section>

如何使用与我一直使用的语法类似的语法更改此值?

行为。。

$example->first_section->second_section->third_section id="2" ->title = $var['data']

不起作用,因为语法错误。

我一直在扫描堆栈溢出,并在整个网络上寻找这样做的示例,但结果是空的。

是否可以像这样定位和更改 xml 中的值,或者我是否需要更改修改此文件的方式?

谢谢。

提供的一些虚拟代码XML肯定不是原始代码。

$xml = simplexml_load_file('../XML/example.xml');
$section = $xml->xpath("//third_section[@id='2']")[0];
// runs a query on the xml tree
// gives always back an array, so pick the first one directly
$section["id"] = "3";
// check if it has indeed changed
echo $xml->asXML();

正如 @Muhammed M. 已经说过的,请查看 SimpleXML 文档以获取更多信息。在 ideone.com 上查看相应的演示。

经过一番乱七八糟,想通了。 多亏了您的贡献,我确实需要使用 Xpath。 但是,它对我不起作用的原因是因为我没有为要编辑的节点指定整个路径。

例如,将 xml 文件加载到对象 ($xml) 后:

    foreach($xml->xpath("/first_section/second_section/third_section[@id='2']") as $entry ) {   
        $entry->title = "mr"; 
    }

这将起作用,因为节点的整个路径包含在括号中。但在我们上面的例子中,例如:

        foreach($xml->xpath("//third_section[@id='2']" as $entry ) {    
        $entry->title = "mr";
        }

这是行不通的,即使我的理解是双//会让它向下钻取,并且我假设 xpath 将搜索整个 xml 结构并返回 id=2 的位置。 在花费数小时测试后,情况似乎并非如此。必须包含节点的整个路径。 一旦我这样做了,它就奏效了。还有一点旁注。$section = $xml->xpath("//third_section[@id='2']")[0];语法不正确。 无需在末尾指定索引"[0]"。包括它标记 Dreamweavers 语法检查器。忽略 Dreamweaver 并上传会破坏代码。 您所需要的只是..$section = $xml->xpath(" 此处节点的整个路径 [@id='2']");

感谢您的帮助和建议xpath。 效果很好...一旦你知道如何使用它。