修复无效的XML以转换为JSON

时间:2014-05-26 07:18:21

标签: php xml regex json

我正在尝试将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;
    }
}

1 个答案:

答案 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);

这里有效:http://ideone.com/RuoGtL