我正在尝试将XML文档转换为JSON,但我遇到的情况是有两种不同的数据类型,一种是删除另一种来解决这个问题。我尝试了一个正则表达式,其中大部分时间都在那里。
我的问题是,有没有比使用正则表达式更好的解决方法?我该如何解决这个问题?
原始XML
<StartMonthGroup>
<StartMonth withdrawn="false"><MajorOfferRound>12 Dec 2013</MajorOfferRound>Sep 2013
</StartMonth>
<StartMonth withdrawn="false">Jan 2014</StartMonth>
<StartMonth withdrawn="false">May 2014</StartMonth>
</StartMonthGroup>
新XML
<StartMonthGroup>
<MajorOfferRound>12 Dec 2013</MajorOfferRound>
<StartMonth withdrawn="false">Sep 2013</StartMonth>
<StartMonth withdrawn="false">Jan 2014</StartMonth>
<StartMonth withdrawn="false">May 2014</StartMonth>
</StartMonthGroup>
PHP代码
public static function fixDates($data)
{
if (preg_match("/<MajorOfferRound>/", $data)) {
$data = preg_replace("/<StartMonth withdrawn=\"false\"><MajorOfferRound>/", "<MajorOfferRound>", $data);
$data = preg_replace("/<\/MajorOfferRound>/", "</MajorOfferRound><StartMonth withdrawn=\"false\">", $data);
$data = preg_replace("/<StartMonth withdrawn=\"true\"><MajorOfferRound>/", "<MajorOfferRound>", $data);
$data = preg_replace("/<\/MajorOfferRound>/", "</MajorOfferRound><StartMonth withdrawn=\"true\">", $data);
return $data;
} else {
return $data;
}
}
答案 0 :(得分:0)
如果您认为正则表达式是最佳方法,您可以一次性完成所有替换。
$regex = '/(<S\w{9}\sw\w{8}=\"\w{4,5}\">)(\W{1,2}M\w{14}>)(.*)(<\/M\w{14}>)(.*)\W+(<\/S\w{9}>)/im';
$result = preg_replace($regex, "$2$3$4\n $1$5$6", $data);