我有这个xml文件:
<flats>
<flat>
<images1>http://www.example.com/image1.jpg</images1>
<images2>http://www.example.com/image1.jpg</images2>
</flat>
</flats>
我需要使用php加载然后替换一些节点名称才能获得此功能(只需将 image1 和 image2 更改为图像:< / p>
<flats>
<flat>
<images>http://www.example.com/image1.jpg</images>
<images>http://www.example.com/image1.jpg</images>
</flat>
</flats>
我设法加载并保存文件,但我不知道如何替换节点名称。
$xml_external_path = 'http://external-site.com/original.xml';
$xml = simplexml_load_file($xml_external_path);
$xml->asXml('updated.xml');
更新 PHP
$xml_external_path = 'http://external-site.com/original.xml';
$xml = simplexml_load_file($xml_external_path);
print_r($xml);
$newXml = str_replace( 'images1', 'image',$xml ) ;
print_r($newXml);
答案 0 :(得分:0)
如果您只想重命名<images1>
和<images2>
代码,我建议您使用最简单的解决方案,即使用str_replace
替换文字。
$xml_external_path = 'http://external-site.com/original.xml';
$xml = simplexml_load_file($xml_external_path);
$searches = ['<images1>', '<images2>', '</images1>', '</images2>'];
$replacements = ['<images>', '<images>', '</images>', '</images>'];
$newXml = simplexml_load_string( str_replace( $searches, $replacements, $xml->asXml() ) );
$newXml->asXml('updated.xml');
如果您需要更复杂的方式来处理任务,您可能需要查看DOMDocument class并构建您自己的新XML
答案 1 :(得分:0)
解析原始xml并创建一个新的xml:
$oldxml = simplexml_load_file("/path/to/file.xml");
// create a new XML trunk
$newxml = simplexml_load_string("<flats><flat/></flats>");
// iterate over child-nodes of <flat>
// check their name
// if name contains "images", add a new child in $newxml
foreach ($oldxml->flat->children() as $key => $value)
if (substr($key, 0, 6) == "images")
$newxml->flat->addChild("images", $value);
// display new XML:
echo $newxml->asXML();
看到它有效:https://eval.in/301221
编辑:如果<flat>
的所有孩子都是<imageX>
,则无需核对$key
:
foreach ($oldxml->flat->children() as $value)
$newxml->flat->addChild("images", $value);
编辑:以下是使用xpath
更改的简短节点选择:
foreach ($oldxml->xpath("/flats/flat/*[starts-with(local-name(), 'images')]") as $value)
$newxml->flat->addChild("images", $value);
上面的xpath
语句将选择以“images”开头的所有<flat>
子项,并将它们放在一个数组中。
看到它有效:https://eval.in/301233