[英]php replacing xml node values
我已经搜索了其他主题,例如我多年以来所做的事情,但没有任何答案。 这是第一次在这里问。
原始码
<?xml version="1.0" ?>
<files>
<fileGroup id="0">
<file_val id="000">
<file_val_sub id="0000" extension="exe">file1.exe</file_val_sub>
<file_val_sub id="0001" extension="doc">docu.doc</file_val_sub>
<file_val_sub id="0002" extension="mp3">song.mp3</file_val_sub>
</file_val>
<file_val id="001">
<file_val_sub id="0010" extension="csv">spr.csv</file_val_sub>
<file_val_sub id="0011" extension="jpg">img.jpg</file_val_sub>
<file_val_sub id="0012" extension="gif">pic.gif</file_val_sub>
</file_val>
<file_val id="002"extension="csv">file22.csv</file_val_sub>
<file_val id="003"extension="txt">file33.txt</file_val_sub>
<file_val id="004"extension="doc">file44.doc</file_val_sub>
...
</fileGroup>
</files>
我要更新xml文件,如下例所示。
<?xml version="1.0" ?>
<files>
<fileGroup id="0">
<file_val id="000">
<file_val_sub id="0000" extension="exe">http://mysite.com/file1.exe</file_val_sub>
<file_val_sub id="0001" extension="doc">http://mysite.com/docu.doc</file_val_sub>
<file_val_sub id="0002" extension="mp3">http://mysite.com/song.mp3</file_val_sub>
</file_val>
<file_val id="001">
<file_val_sub id="0010" extension="csv">http://mysite.com/spr.csv</file_val_sub>
<file_val_sub id="0011" extension="jpg">http://mysite.com/img.jpg</file_val_sub>
<file_val_sub id="0012" extension="gif">http://mysite.com/pic.gif</file_val_sub>
</file_val>
<file_val id="002"extension="csv">http://mysite.com/file22.csv</file_val_sub>
<file_val id="003"extension="txt">http://mysite.com/file33.txt</file_val_sub>
<file_val id="004"extension="doc">http://mysite.com/file44.doc</file_val_sub>
...
</fileGroup>
</files>
我可以使用simplexml_load_file()获取并找到值,但无法修改和保存它。
$xml =simplexml_load_file($xml_url);
先感谢您。
编辑...
我的代码不是真的很简单而且很脏,但是我至少可以对其进行修改和保存。如果有更好的方法(当然有),请告诉我。
function getXmlForPreview($xml_url,$val,$file_path)
{
// Load File
$xml =simplexml_load_file($xml_url);
// Check child nodes
$multi_node = true;
if (count($xml->layout->layout_val) == 1) {
$multi_node = false;
}
else if (count($xml->layout->layout_val) > 1) {
$multi_node = true;
}
if ($multi_node)
{
for($i=0;$i<count($xml->layout->layout_val);$i++)
{
for($j=0;$j<count($xml->layout->layout_val[$i]);$j++)
{
$xml->layout->layout_val[$i]->layout_val_sub[$j][0] = $val . (string) $xml->layout->layout_val[$i]->layout_val_sub[$j][0];
}
}
}
else // no multi child
{
for($j=0;$j<count($xml->layout->layout_val[0]);$j++)
{
$xml->layout->layout_val[0]->layout_val_sub[$j][0] = $val . (string) $xml->layout->layout_val[0]->layout_val_sub[$j][0];
}
}
$xml->asXML($file_path);
}
getXmlForPreview("http://mysite.com/xmls/abc.xml",""http://mysite.com/,"/var/www/new_xml.xml");
如果xml文件不太大,我喜欢使用正则表达式。我认为它更灵活。
$str = <<<end
<?xml version="1.0" ?>
<files>
<fileGroup id="0">
<file_val id="000">
<file_val_sub id="0000" extension="exe">file1.exe</file_val_sub>
<file_val_sub id="0001" extension="doc">docu.doc</file_val_sub>
<file_val_sub id="0002" extension="mp3">song.mp3</file_val_sub>
</file_val>
<file_val id="001">
<file_val_sub id="0010" extension="csv">spr.csv</file_val_sub>
<file_val_sub id="0011" extension="jpg">img.jpg</file_val_sub>
<file_val_sub id="0012" extension="gif">pic.gif</file_val_sub>
</file_val>
<file_val id="002"extension="csv">file22.csv</file_val_sub>
<file_val id="003"extension="txt">file33.txt</file_val_sub>
<file_val id="004"extension="doc">file44.doc</file_val_sub>
...
</fileGroup>
</files>
end;
echo $str.PHP_EOL;
var_dump(preg_replace('/>(.+\..+)?</','>http://mysite.com/$1<',$str));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.