복붙노트

[PYTHON] 파이썬 사전을 XML로 직렬화 [닫힘]

PYTHON

파이썬 사전을 XML로 직렬화 [닫힘]

Python 객체를 JSON으로 쉽게 직렬화하는 "simplejson"이라는 간단한 JSON 직렬화 모듈이 있습니다.

나는 XML로 직렬화 할 수있는 유사한 모듈을 찾고있다.

해결법

  1. ==============================

    1.http://code.activestate.com/recipes/415983/

    http://code.activestate.com/recipes/415983/

    http://sourceforge.net/projects/pyxser/

    http://soapy.sourceforge.net/

    http://www.ibm.com/developerworks/webservices/library/ws-pyth5/

    http://gnosis.cx/publish/programming/xml_matters_1.txt

  2. ==============================

    2.정신으로 simplejson과 호환되도록 시도하는 huTools.structured.dict2xml이 있습니다. 중첩 된 하위 구조를 래핑하는 방법에 대한 힌트를 제공 할 수 있습니다. dict2xml에 의해 반환 된 문자열 인 경우 대신 ElementTree Objects를 반환하는 huTools.structured.dict2et 설명서를 확인하십시오.

    정신으로 simplejson과 호환되도록 시도하는 huTools.structured.dict2xml이 있습니다. 중첩 된 하위 구조를 래핑하는 방법에 대한 힌트를 제공 할 수 있습니다. dict2xml에 의해 반환 된 문자열 인 경우 대신 ElementTree Objects를 반환하는 huTools.structured.dict2et 설명서를 확인하십시오.

    >>> data = {"kommiauftragsnr":2103839, "anliefertermin":"2009-11-25", "prioritaet": 7,
    ... "ort": u"Hücksenwagen",
    ... "positionen": [{"menge": 12, "artnr": "14640/XL", "posnr": 1},],
    ... "versandeinweisungen": [{"guid": "2103839-XalE", "bezeichner": "avisierung48h",
    ...                          "anweisung": "48h vor Anlieferung unter 0900-LOGISTIK avisieren"},
    ... ]}
    
    >>> print ET.tostring(dict2et(data, 'kommiauftrag',
    ... listnames={'positionen': 'position', 'versandeinweisungen': 'versandeinweisung'}))
    '''<kommiauftrag>
    <anliefertermin>2009-11-25</anliefertermin>
    <positionen>
        <position>
            <posnr>1</posnr>
            <menge>12</menge>
            <artnr>14640/XL</artnr>
        </position>
    </positionen>
    <ort>H&#xC3;&#xBC;cksenwagen</ort>
    <versandeinweisungen>
        <versandeinweisung>
            <bezeichner>avisierung48h</bezeichner>
            <anweisung>48h vor Anlieferung unter 0900-LOGISTIK avisieren</anweisung>
            <guid>2103839-XalE</guid>
        </versandeinweisung>
    </versandeinweisungen>
    <prioritaet>7</prioritaet>
    <kommiauftragsnr>2103839</kommiauftragsnr>
    </kommiauftrag>'''
    
  3. ==============================

    3.이거 한번 해봐. 유일한 문제는 (나는 그들을 좋아하지 않기 때문에) 속성을 사용하지 않는다. pynuggets.wordpress.com에 dict2xml activestate에서 dict2xml

    이거 한번 해봐. 유일한 문제는 (나는 그들을 좋아하지 않기 때문에) 속성을 사용하지 않는다. pynuggets.wordpress.com에 dict2xml activestate에서 dict2xml

    from xml.dom.minidom import Document
    import copy
    
    class dict2xml(object):
        doc     = Document()
    
        def __init__(self, structure):
            if len(structure) == 1:
                rootName    = str(structure.keys()[0])
                self.root   = self.doc.createElement(rootName)
    
                self.doc.appendChild(self.root)
                self.build(self.root, structure[rootName])
    
        def build(self, father, structure):
            if type(structure) == dict:
                for k in structure:
                    tag = self.doc.createElement(k)
                    father.appendChild(tag)
                    self.build(tag, structure[k])
    
            elif type(structure) == list:
                grandFather = father.parentNode
                tagName     = father.tagName
                grandFather.removeChild(father)
                for l in structure:
                    tag = self.doc.createElement(tagName)
                    self.build(tag, l)
                    grandFather.appendChild(tag)
    
            else:
                data    = str(structure)
                tag     = self.doc.createTextNode(data)
                father.appendChild(tag)
    
        def display(self):
            print self.doc.toprettyxml(indent="  ")
    
    if __name__ == '__main__':
        example = {'auftrag':{"kommiauftragsnr":2103839, "anliefertermin":"2009-11-25", "prioritaet": 7,"ort": u"Huecksenwagen","positionen": [{"menge": 12, "artnr": "14640/XL", "posnr": 1},],"versandeinweisungen": [{"guid": "2103839-XalE", "bezeichner": "avisierung48h","anweisung": "48h vor Anlieferung unter 0900-LOGISTIK avisieren"},]}}
        xml = dict2xml(example)
        xml.display()
    
  4. ==============================

    4.나는 사전을 XML (30 줄 이하)로 직렬화하는 간단한 함수를 작성했다.

    나는 사전을 XML (30 줄 이하)로 직렬화하는 간단한 함수를 작성했다.

    용법:

    mydict = {
        'name': 'The Andersson\'s',
        'size': 4,
        'children': {
            'total-age': 62,
            'child': [
                {
                    'name': 'Tom',
                    'sex': 'male',
                },
                {
                    'name': 'Betty',
                    'sex': 'female',
                }
            ]
        },
    }
    print(dict2xml(mydict, 'family'))
    

    결과:

    <family name="The Andersson's" size="4">
            <children total-age="62">
                    <child name="Tom" sex="male"/>
                    <child name="Betty" sex="female"/>
            </children>
    </family>
    

    전체 소스 (예제 포함)는 https://gist.github.com/reimund/5435343/에서 찾을 수 있습니다.

    참고 :이 함수는 사전 항목을 텍스트 노드가 아닌 속성으로 직렬화합니다. 텍스트를 지원하도록 수정하는 것은 매우 쉽습니다.

  5. ==============================

    5.파이썬의 대부분의 객체는 아래에 dicts로 표현됩니다.

    파이썬의 대부분의 객체는 아래에 dicts로 표현됩니다.

    >>> class Fred(object) : 
    ...    def __init__(self, n) : self.n = n 
    ... 
    >>> a = Fred(100)
    >>> print a.__dict__ 
    {'n': 100}
    

    따라서 이것은 dicts를 XML로 변환하는 방법을 묻는 것과 유사합니다. dict을 XML로 /에서 변환하는 도구가 있습니다.

    http://www.picklingtools.com

    다음은 간단한 예입니다.

        >>> import xmltools
    
        >>> d = {'a':1, 'b':2.2, 'c':'three' }
        >>> xx = xmltools.WriteToXMLString(d)
        >>> print xx
        <?xml version="1.0" encoding="UTF-8"?>
        <top>
          <a>1</a>
          <b>2.2</b>
          <c>three</c>
        </top>
    

    웹 사이트에는 예제를 보여주는 많은 문서가 있습니다.

    XML 도구 설명서

    dict과 XML 사이를 "정확하게"변환하는 것은 어렵습니다. 목록이란 무엇입니까? 속성으로 무엇을합니까? 숫자 키는 어떻게 처리합니까? 이러한 문제가 많이 제기되었습니다. XML 도구 문서 (위)에서 설명합니다.

    속도가 중요합니까? 또는 사용 용이성이 중요합니까? 순수 C ++ 모듈 (모두 C ++로 작성), 순수 파이썬 모듈 (모두 파이썬으로 작성), 파이썬 C 확장 모듈 (C ++으로 작성되었지만 파이썬에서 호출 할 수 있도록 포장되어 있음)이 있습니다. C ++과 Python C Extension 모듈은 훨씬 빠른 속도로 진행되지만 물론 컴파일이 필요합니다. 파이썬 모듈은 정상적으로 작동하지만 느려집니다.

  6. from https://stackoverflow.com/questions/1019895/serialize-python-dictionary-to-xml by cc-by-sa and MIT license