【发布时间】:2021-03-08 15:18:23
【问题描述】:
我正在尝试在 PHP 中读取 XML 文件,编辑一些值并将其保存回来。
我通过在 php.ini 中打开 XML 文件来做到这一点。然后我使用 SimpleXML 将其转换为数组。在完成所需的操作后,由于我的 XML 元素如何转换为属性,我正在努力将该数组以相同的格式返回到 XML 文件中。因此,当我从数组转到 XML 时,我的元素(现在是属性)被保存为更新后的 XML 文件中的属性。
我想知道从 php 数组转换回 XML 时是否可以保留 XML 元素。
一个包含两个元素的随机 XML 示例,我们称之为 myFile.xml
<XML>
<Project Element1 = 'some random value' Element2='Will be stored as attribute instead'>
</XML>
我将运行的 php 代码将其转换为数组
<?php
$xml = simplexml_load_file("myFile.xml") or die("Error: Cannot create object");
$arrayXML = json_decode(json_encode((array)$xml), TRUE);
$arrayXML["Project"]["attributes"]["Element1"] = "updated value"
// I will then run some array to XML converter code here found online
// took it from here https://stackoverflow.com/questions/1397036/how-to-convert-array-to-simplexml
function array_to_xml( $data, &$xml_data ) {
foreach( $data as $key => $value ) {
if( is_array($value) ) {
if( is_numeric($key) ){
$key = 'item'.$key; //dealing with <0/>..<n/> issues
}
$subnode = $xml_data->addChild($key);
array_to_xml($value, $subnode);
} else {
$xml_data->addChild("$key",htmlspecialchars("$value"));
}
}
}
$xml_data = new SimpleXMLElement();
array_to_xml($arrayNexus,$xml_data);
saving generated xml file;
$result = $xml_data->asXML('myFile.xml');
?>
像这样的东西会生成这样的 XML 文件
<XML>
<Project>
<attribute>
<Element1>updated value</Element1>
<Element2><Will be stored as attribute instead</Element2>
</attribute>
</Project>
</XML>
我想要的结果是什么时候
<XML>
<Project Element1 = 'updated value' Element2='Will be stored as attribute instead'>
</XML>
我可以编写自己的 XML 转换器,但如果那里已经存在方法,有人可以告诉我方法吗?
【问题讨论】:
-
为什么要打扰杰森?您可以直接在xml中更改属性。
-
嘿杰克,所以为了示例,我或多或少地在这里重写了我的实际代码,但如果我没记错的话(我会在验证我要说的内容后再次评论,我目前无权访问我的代码)我必须进行 json 编码和解码是因为它会跳过我的第一个 XML 标记或由于某些原因完全忽略我的第一个键(XML 标记),但如果我不会通过json编码和解码传递它,再次感谢其他一些我不记得的stackoverflow人,所以我不能相信他们。对不起
标签: php arrays xml simplexml xmlelement