可能的重复项:
具有带连字符名称的简单 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';