0

可能重复:
带有连字符名称的 SimpleXML Reading 节点

我想更改一个 xml,但此代码失败。

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

chang.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;
?>
4

2 回答 2

1

为什么这不起作用?

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

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

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

如果您理解正则表达式:作为正则表达式,它会这样表达:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

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

但是,从文档中,可以通过将元素名称封装在大括号和撇号中来完成访问 XML 文档中包含 PHP 命名约定中不允许的字符(例如连字符)的元素。您可以将 var 包装在 {} 中以简化Xml elemnts 使这项工作在这里看到一些很好的解释 所以你仍然可以通过改变使它工作:

<?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(); 
?>
于 2012-06-24T20:42:37.863 回答
0

更改这些行:

$xml->{"ID-1"}[0] = '8';
$xml->name[0] = 'Big Cliff'; 
于 2012-06-24T20:53:22.943 回答