【问题标题】:writing xml data to file using python使用python将xml数据写入文件
【发布时间】:2014-05-02 09:44:22
【问题描述】:

我需要将从下面的函数中获得的 xml 写入文件。谁能帮我完成这段代码:

import json
import urllib

results = json.load(urllib.urlopen("http://www.kimonolabs.com/api/4v1t8lgk?apikey=880a9bdbfb8444e00e2505e1533970a7"))


def json2xml(json_obj, line_padding=""):
    result_list = list()
json_obj_type = type(json_obj)

if json_obj_type is list:
    for sub_elem in json_obj:
        result_list.append(json2xml(sub_elem, line_padding))
        f= open('tori_json.xml', 'w')
        f.write(str(json_obj))
        f.close()

    return "\n".join(result_list)

if json_obj_type is dict:
    for tag_name in json_obj:
        sub_obj = json_obj[tag_name]
        result_list.append("%s<%s>" % (line_padding, tag_name))
        result_list.append(json2xml(sub_obj, "\t" + line_padding))
        result_list.append("%s</%s>" % (line_padding, tag_name))


    return "\n".join(result_list)

return "%s%s" % (line_padding, json_obj)

所以当我运行函数 json2xml(results) 时,它会将 xml 写入文件。

【问题讨论】:

  • 不要尝试手动编写 xml 文件,使用 elementtree 或 lxml 之类的包。您生成的很可能不是有效的 xml。我没有看到任何根元素,没有标签名称有效性检查,没有特殊字符的转换。
  • 我认为您的意思是芬兰语代码。

标签: python xml json


【解决方案1】:
with open("data.xml",'w') as f:
    for line in json2xml(results):
        f.write(line.encode('utf-8'))

使用一些xml processing lib 可能会更好

【讨论】:

    【解决方案2】:

    此代码使用BeautifulSoup。 JSON 结构需要一些额外的信息才能成为一个像样的 XML,所以我添加了一些“产品”标签来封装每个产品。

    from copy import deepcopy
    import json
    import re
    import urllib
    
    from BeautifulSoup import BeautifulStoneSoup, Tag, NavigableString
    
    results = json.load(urllib.urlopen("http://www.kimonolabs.com/api/4v1t8lgk?apikey=880a9bdbfb8444e00e2505e1533970a7"))
    
    class named_list(list):
        def __init__(self, name, *args, **kwargs):
            self.name = name
            super(named_list, self).__init__(*args, **kwargs)
    
        def __repr__(self):
            return "<named_list %s: %s>" % (self.name, super(named_list, self).__repr__())
    
    def dict_recurse(obj, obj_parent, nameless_default = "product"):
        olist = []
        if isinstance(obj, list):
            for x in obj:
                olist.extend(dict_recurse(x, obj))
        elif isinstance(obj, dict):
            for x in sorted(obj.keys()):
                olist.append(named_list(x, dict_recurse(obj[x], obj)))
            if isinstance(obj_parent, list):
                olist = [named_list(nameless_default, olist)]
        else:
            olist.append(obj)
        return olist
    
    def tag_tree_build(ilist, top_tag, soup):
        if isinstance(ilist, named_list):
            cur_tag = Tag(soup, ilist.name)
            for q in ilist:
                tag_tree_build(q, cur_tag, soup)
            top_tag.insert(len(top_tag), cur_tag)
        elif isinstance(ilist, list):
            for q in ilist:
                tag_tree_build(q, top_tag, soup)
        else:
            cur_str = NavigableString(re.sub("\s+", " ", unicode(ilist)))
            top_tag.insert(len(top_tag), cur_str)
    
    nested = dict_recurse(results, results)
    soup = BeautifulStoneSoup()
    tag_tree_build(nested, soup, soup)
    file("finnish.xml", "w").write(soup.prettify())
    file("finnish.json", "w").write(json.dumps(results, sort_keys = True, indent = 4))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2014-03-12
      • 2014-03-13
      • 2014-03-20
      • 1970-01-01
      相关资源
      最近更新 更多