【问题标题】:php update node value which has attributephp更新具有属性的节点值
【发布时间】:2015-12-29 10:48:18
【问题描述】:

您好,我需要使用 php 从现有的 xml 内容修改 xml 现有的xml

<?xml version="1.0" encoding="utf-8"?>
<Book  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" BookId="10010">
     <STRING id="Name" >Test1</STRING>
    <STRING id="ISBN">102399</STRING>
</Book>

新的xml

<?xml version="1.0" encoding="utf-8"?>
<Book BookId="10010" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
     <STRING id="Name" >XYZ</STRING>
    <STRING id="ISBN">7777</STRING>
</Book>

注意:BookID 应该放在 xmlns 属性之前

提前谢谢你。

【问题讨论】:

  • 属性的顺序无关紧要?
  • Stackoverflow 在这里帮助您修复代码并帮助您解决它,而不是为您解决它。你有没有尝试过?
  • 你检查过 PHP 中的 DOMDocument 吗?
  • 是的,属性的顺序无关紧要。

标签: php xml


【解决方案1】:

使用SimpleXML:

$xml = simplexml_load_file($yourXMLPath);

//Loop for element...
foreach ($xml->STRING as $string) {
    //Update value for <STRING id="Name">...
    if($string->attributes()->id == 'Name'){
        $xml->STRING = 'XYZ';
    }

    //Update value for <STRING id="Name">...
    if($string->attributes()->id == 'ISBN'){
        $xml->STRING = '7777';
    }
}

// save the updated document
$xml->asXML('newXML.xml');

【讨论】:

  • 感谢分享我已验证但对我不起作用的代码
  • 代码没有错误,但它没有按预期更新值,代码应该处理的另一件事(BookID 应该放在 xmlns 属性之前)
  • 检查 print_r($xml); xml 对象值。
  • 感谢您的回复,但 print_r 打印的现有值未更新。
  • 好的,表示条件问题。请检查print_r($xml-&gt;STRING);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多