Php 如何根据预设参数查找和替换XML中的值

Php 如何根据预设参数查找和替换XML中的值,php,xml-parsing,Php,Xml Parsing,请告知。我有需要通过php更正的XML XML示例 <?xml version="1.0"?> <csv_data> <row> <articul>1107134</articul> <type>car tires</type> <brand>Aeolus</brand> <name>Aeolus AL01 Trans Ace 195/75 R1

请告知。我有需要通过php更正的XML

XML示例

<?xml version="1.0"?>
<csv_data>
<row>
    <articul>1107134</articul>
    <type>car tires</type>
    <brand>Aeolus</brand>
    <name>Aeolus AL01 Trans Ace 195/75 R16C 107/105R</name>
    <season>summer</season>
</row>
<row>
    <articul>1107134</articul>
    <type>car tires</type>
    <brand>Aeolus</brand>
    <name>Aeolus AL01 Trans Ace 195/75 R16 107/105R</name>
    <season>summer</season>
</row>
</csv_data>
  • 获取所有行节点
    $dom->getElementsByTagName('row')
  • 如果
    [A-Z]{1}\d{2}C
    行内的
    节点值
    匹配,则轮胎为新轮胎
  • 循环
    行的
    子节点
    ,直到找到
    localName
    =类型
  • 将上面匹配的
    子节点
    节点值
    更改为新节点+现有节点


  • 获取所有行节点
    $dom->getElementsByTagName('row')
  • 如果
    [A-Z]{1}\d{2}C
    行内的
    节点值
    匹配,则轮胎为新轮胎
  • 循环
    行的
    子节点
    ,直到找到
    localName
    =类型
  • 将上面匹配的
    子节点
    节点值
    更改为新节点+现有节点



  • 在使用SimpleXML时,您不需要担心DOM操作,可以将XML对象视为StdClass

    $filename = "./mos-test2.xml";
    $data = simplexml_load_file($filename);
    
    foreach ($data as $row) {
        if (preg_match("/R\d{2}C/", $row->name) === 1) {
            $row->type = 'new ' . $row->type;
        }   
    }
    
    $str = $data->asXML();
    

    正如名字中所说,SimpleXml使事情变得简单。

    当您使用SimpleXml时,您不需要担心DOM操作,并且可以将XML对象视为StdClass

    $filename = "./mos-test2.xml";
    $data = simplexml_load_file($filename);
    
    foreach ($data as $row) {
        if (preg_match("/R\d{2}C/", $row->name) === 1) {
            $row->type = 'new ' . $row->type;
        }   
    }
    
    $str = $data->asXML();
    
    正如名字中所说,SimpleXml使事情变得简单。

    感谢大家

    这个代码对我有用

    <?
    $dom = new DOMDocument();
    $dom->loadXML(file_get_contents("./mos-test2.xml"));
    $rows = $dom->getElementsByTagName('row');
    foreach($rows as $row){
     if (preg_match('/[A-Z]{1}\d{2}C/', $row->nodeValue)){
         foreach($row->childNodes as $child) {
             if($child->localName == "type"){
                 $child->nodeValue = "Легкогрузовые";
            }
          }
       }
    }
    $dom->encoding = 'UTF-8';
    $dom->save("./mos-test-ready.xml")
    ?>
    
    
    
    谢谢大家

    这个代码对我有用

    <?
    $dom = new DOMDocument();
    $dom->loadXML(file_get_contents("./mos-test2.xml"));
    $rows = $dom->getElementsByTagName('row');
    foreach($rows as $row){
     if (preg_match('/[A-Z]{1}\d{2}C/', $row->nodeValue)){
         foreach($row->childNodes as $child) {
             if($child->localName == "type"){
                 $child->nodeValue = "Легкогрузовые";
            }
          }
       }
    }
    $dom->encoding = 'UTF-8';
    $dom->save("./mos-test-ready.xml")
    ?>
    
    
    
    我发布了一个答案,但它没有涵盖你问题的
    符号C`部分,我将在bit中更新它。我发布了一个答案,但它没有涵盖你问题的
    符号C`部分,我将在稍后更新它