Php 如何更新以id“分组的子项?”;“X”;,使用simpleXML
我是新来的Php 如何更新以id“分组的子项?”;“X”;,使用simpleXML,php,xml,simplexml,updatexml,Php,Xml,Simplexml,Updatexml,我是新来的simplexml所以如果我混淆了一些术语,请原谅:) 我将以下xml文件存储在:js/data.xml: <users> <user> <id>2011</id> <posX>12</posX> <posY>29</posY> <title>Senior Developer</title> </user> &l
simplexml
所以如果我混淆了一些术语,请原谅:)
我将以下xml文件存储在:js/data.xml
:
<users>
<user>
<id>2011</id>
<posX>12</posX>
<posY>29</posY>
<title>Senior Developer</title>
</user>
<user>
<id>2022</id>
<posX>45</posX>
<posY>87</posY>
<title>Test22 text</title>
</user>
</users>
这将向文件中添加新用户。到目前为止还不错,这里没有问题
如果仔细查看代码,您将看到我要添加的新用户与xml文件中的用户具有相同的id(2022)。这是同一个人,所以在本例中,我不想添加他,而是更新他。问题就从这里开始
要更新他,我首先需要检查ID是否存在。我在谷歌上搜索了一下这个网站,找到了一个解决方案:问题是,我无法让它工作
这是我的php文件的修改代码:
$xml = simplexml_load_file("js/data.xml");
//from: https://stackoverflow.com/questions/1560827/php-simplexml-check-if-a-child-exist
if (isset($xml->user->id->2022)) { // c exists
echo "test";
} else { //else add it
$user = $xml->addChild('user');
$user->addChild('id',2022);
$user->addChild('posX',45);
$user->addChild('posY',87);
$user->addChild('title','Test33 text');
}
// Store new XML code in data.xml
$xml->asXML("js/data.xml");
echo $xml->asXML();
因此,这里我尝试检查id是否存在。如果是:echo
something,否则添加此人。不幸的是,当我运行此代码时,出现以下错误:
Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'
有人知道我做错了什么吗
我遇到的第二个问题是,如果id
存在,则更新子项(posX
、posY
和title
)(当然,只有使用此id分组的子项)。代码的这一部分需要放在测试回音现在所在的位置。我在这个网站或谷歌上找不到使用simplexml的有效解决方案。有人知道怎么做吗
感谢您抽出时间而是使用xpath()
通过
选择一个
:
现在检查$user
。如果XML具有上述ID,$user
将包含SimpleXML
元素。否则,
$user
将为NULL
if (!$user) {
// create new user
} else {
$user->title = "updated!";
}
请注意,第3行末尾的[NULL]
要求PHP>=5.4,如果没有,请使用:
list($user) = $xml->xpath("/users/user[id = '$id']") + array(NULL);
看到它工作了吗
有人知道我做错了什么吗
这很容易回答,错误消息的主要部分是“语法错误,意外的T_LNUMBER”
解析错误意味着PHP无法理解您编写的代码。这通常是印刷错误的标志(计算机的语法错误)。PHP然后告诉您它有什么错误:意外的T_LNUMBER,其中T_LNUMBER
是长数字的标记名,与整数一样长,而不是特别长
// from: https://stackoverflow.com/questions/1560827/php-simplexml-check-if-a-child-exist
if (isset($xml->user->id->2022))
^^^^
那就是这个号码。在PHP中,要访问字段,需要在该位置以a-Z或a-Z范围内的字母开头,而不是以0-9等不同范围的字母开头
您从最可能的位置复制代码太快,可能是因为您希望同时执行两件事:
$idExists = isset($xml->user->id);
$idIs2022 = $idExists && trim($xml->user->id) == 2022;
第一行代码存储在SimpleXMLElement$XML
中解析的XML是否具有包含名为id的子元素的第一个用户元素的结果。如果根本没有用户元素,它仍将失败
第二行将该元素的修剪文本值与数值整数值2022进行比较
由于这仍然容易出错,而且有点繁琐,因此这里的说明更为优雅。感谢您的解释这非常有效,感谢您的解释和示例。这些对理解这一切有很大帮助
Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'
// from: https://stackoverflow.com/questions/1560827/php-simplexml-check-if-a-child-exist
if (isset($xml->user->id->2022))
^^^^
$idExists = isset($xml->user->id);
$idIs2022 = $idExists && trim($xml->user->id) == 2022;