代码之家  ›  专栏  ›  技术社区  ›  Eric Herlitz

simplexml\u load\u字符串等效Python/Django

  •  2
  • Eric Herlitz  · 技术社区  · 14 年前

    我试图在Python中找到一个xml解释函数(比如simplexml\u load\u字符串),但没有成功:/

    假设我有一个字符串中的xml

    my_xml_string = """
    <root>
          <content>
            <one>A value</one>
            <two>Here goes for ...</two>
          </content>
    </root>"""
    

    要在php中读取一个值,我通常会这样做

    // read into object
    $xml = simplexml_load_string(my_xml_string);
    
    // print some values
    echo $xml->root->content->one
    echo $xml->root->content->two
    

    谢谢

    5 回复  |  直到 11 年前
        1
  •  4
  •   mmmmmm    14 年前

    最近的可能是 ElementTree lxml )

    import  xml.etree
    
    element =  xml.etree.ElementTree.XML(my_xml_string)
    

    设置属于类元素的元素,可以将其视为XML元素的列表

    例如

    # for your example
    print(element[0][0].tag)
    print(element[0][0].text)
    print(element[0][3].text)
    

    如果要使用名称,还可以通过XPath进行搜索。

    lxml还有一个 objectify 允许访问元素的模型,如“如果您处理的是一个普通的Python对象层次结构”,这与php的用法更为吻合

        2
  •  2
  •   LXj    13 年前

    lxml.objectify

    In [1]: from lxml import objectify
    
    In [2]: x = objectify.fromstring("""<response><version>1.2</version><amount>1.01</amount><currency>USD</currency></response>""")
    
    In [3]: x.version
    Out[3]: 1.2
    
    In [4]: x.amount
    Out[4]: 1.01
    
    In [5]: x.currency
    Out[5]: 'USD'
    
        3
  •  1
  •   Daniel Roseman    14 年前

    这个 Python standard library 包括几个xml解析模块。可能最简单的是元素树。

    from xml.etree import cElementTree as ET
    xml = ET.fromstring(my_xml_string)
    
    print xml.find('.//content/one').text
    print xml.find('.//content/two').text
    
        4
  •  1
  •   Gabriel Hurley    14 年前

    ElementTree

    不过,我个人更喜欢 lxml

        5
  •  0
  •   Eric Herlitz    14 年前

    从xml.dom.minidom导入*

    my_xml_string = """
    <root>
          <content>
            <one>A value</one>
            <two>Here goes for ...</two>
          </content>
    </root>"""
    
    xml = parseString(xml_string)
    result = xml.getElementsByTagName('one')[0].firstChild.data
    

    就目前而言,这是个好办法!