这个数据结构怎么转换一下?

原本是一个xml文件:location.xml

<Location>
  <CountryRegion Name="中国" Code="1">
    <State Name="北京" Code="11">
      <City Name="东城" Code="1" />
      <City Name="西城" Code="2" />
      <City Name="朝阳" Code="5" />
      <City Name="丰台" Code="6" />
      <City Name="石景山" Code="7" />
      <City Name="海淀" Code="8" />
      <City Name="门头沟" Code="9" />
      <City Name="房山" Code="11" />
      <City Name="通州" Code="12" />
      <City Name="顺义" Code="13" />
      <City Name="昌平" Code="21" />
      <City Name="大兴" Code="24" />
      <City Name="平谷" Code="26" />
      <City Name="怀柔" Code="27" />
      <City Name="密云" Code="28" />
      <City Name="延庆" Code="29" />
    </State>
    <State Name="天津" Code="12">
      <City Name="和平" Code="1" />
      <City Name="河东" Code="2" />
      <City Name="河西" Code="3" />
      <City Name="南开" Code="4" />
      <City Name="河北" Code="5" />
      <City Name="红桥" Code="6" />
      <City Name="滨海新区" Code="26" />
      <City Name="东丽" Code="10" />
      <City Name="西青" Code="11" />
      <City Name="津南" Code="12" />
      <City Name="北辰" Code="13" />
      <City Name="宁河" Code="21" />
      <City Name="武清" Code="22" />
      <City Name="静海" Code="23" />
      <City Name="宝坻" Code="24" />
      <City Name="蓟县" Code="25" />
    </State>
    
  <CountryRegion>
<Location>

我想转换成这样:location.js

        location: {
            '北京': ['东城', '西城', '朝阳', '丰台', '石景山', '海淀', '门头沟', '房山', '通州', '顺义', '昌平', '大兴', '怀柔', '平谷', '密云', '延庆'],
            '天津': ['河东', '河西', '南开', '河北', '红桥', '东丽', '西青', '津南', '北辰', '武清', '宝坻', '滨海', '宁河', '静海', '蓟县']
        }

用什么方式比较好?用爬虫还是其他什么方式?

阅读 3.1k
5 个回答

本地有PHP环境的话可以用这个转换

<?php

$source = <<<XML
<Location>
  <CountryRegion Name="中国" Code="1">
    <State Name="北京" Code="11">
      <City Name="东城" Code="1" />
      <City Name="西城" Code="2" />
      <City Name="朝阳" Code="5" />
      <City Name="丰台" Code="6" />
      <City Name="石景山" Code="7" />
      <City Name="海淀" Code="8" />
      <City Name="门头沟" Code="9" />
      <City Name="房山" Code="11" />
      <City Name="通州" Code="12" />
      <City Name="顺义" Code="13" />
      <City Name="昌平" Code="21" />
      <City Name="大兴" Code="24" />
      <City Name="平谷" Code="26" />
      <City Name="怀柔" Code="27" />
      <City Name="密云" Code="28" />
      <City Name="延庆" Code="29" />
    </State>
    <State Name="天津" Code="12">
      <City Name="和平" Code="1" />
      <City Name="河东" Code="2" />
      <City Name="河西" Code="3" />
      <City Name="南开" Code="4" />
      <City Name="河北" Code="5" />
      <City Name="红桥" Code="6" />
      <City Name="滨海新区" Code="26" />
      <City Name="东丽" Code="10" />
      <City Name="西青" Code="11" />
      <City Name="津南" Code="12" />
      <City Name="北辰" Code="13" />
      <City Name="宁河" Code="21" />
      <City Name="武清" Code="22" />
      <City Name="静海" Code="23" />
      <City Name="宝坻" Code="24" />
      <City Name="蓟县" Code="25" />
    </State>

  </CountryRegion>
</Location>
XML;

$result = [
    'location' => [],
];

$xml = simplexml_load_string($source);
foreach ($xml->CountryRegion->State as $state) {
    $province = '';
    foreach ($state->attributes() as $key => $att) {
        if ($key == 'Name') {
            $province = (string) $att;
        }
    }

    $result['location'][$province] = [];
    foreach ($state->City as $city) {
        foreach ($city->attributes() as $key => $attr) {
            if ($key == 'Name') {
                $result['location'][$province][] = (string) $attr;
            }
        }
    }
}

echo (json_encode($result, JSON_UNESCAPED_UNICODE));

保存为test.php,然后执行php test.php即可。输出如下

{"location":{"北京":["东城","西城","朝阳","丰台","石景山","海淀","门头沟","房山","通州","顺义","昌平","大兴","平谷","怀柔","密云","延庆"],"天津":["和平","河东","河西","南开","河北","红桥","滨海新区","东丽","西青","津南","北辰","宁河","武清","静海","宝坻","蓟县"]}}

谁给你的数据,让服务端直接给你转成json格式的最好。很少有人用js来保存数据,最多也就是个配置文件。

你可以找一个解析xml的库,然后把里面的数据提取出来,转换成你想要的格式!如果你的js是跑在浏览器上的,那就更简单了,DOM有提供现成的api来可以解析xml

xml格式的数据 前端也可以访问吧
数据都是后台给的
如果真想转json
让后台的转一下
大家都方便

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题