在 PHP 中更改值 XML,但使用节点名称 ID-7 更改 false


change a value xml in php but false with a node name id-7

可能的重复项:
具有带连字符名称的简单 XML 读取节点

我想更改 xml,但使用此代码失败。

我认为 php 中的变量名称 (ID-1) 有误。

张.php

<?php 
include 'example.php'; 
$xml = new SimpleXMLElement($xmlstr); 
$xml->ID-1 = '8';
$xml->name = 'Big Cliff'; 
$xml->asXML('test2.xml');
echo $xml->asXML(); 
?>

示例.php

<?php
$xmlstr = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<film>
  <ID-1>29</ID-1>
  <name>adf</name>
  </film>
XML;
?>

为什么这不起作用?

请参阅 php 变量。变量中不能有"-"。在 PHP(可能是任何 C 类型语言)中,你不能用连字符/破折号创建变量的一点一直是这样,因为该字符用于减法运算符

http://www.php.net/manual/en/language.variables.basics.php

变量名称遵循与 PHP 中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母、数字或下划线。

如果你 UnderstanD Regex : 作为正则表达式,它将表示为:"[a-zA-Z_''x7f-''xff][a-zA-Z0-9_''x7f-''xff]*'

如果我不能用"-"控制元素名称怎么办?

但是,从文档中,访问 XML 文档中包含 PHP 命名约定不允许的字符(例如连字符)的元素可以通过将元素名称封装在大括号和撇号中来完成。您可以将 var 包装在 {} 中以获得简单的 Xml 修饰符来完成这项工作 在这里查看一些很好的解释因此,您仍然可以通过更改以下内容来使其工作:

<?php 
include 'example.php'; 
$xml = new SimpleXMLElement($xmlstr); 
$xml->{'ID-1'} = '8';//change here
$xml->name = 'Big Cliff'; 
$xml->asXML('test2.xml');
echo $xml->asXML(); 
?>

更改以下行:

$xml->{"ID-1"}[0] = '8';
$xml->name[0] = 'Big Cliff';