代码之家  ›  专栏  ›  技术社区  ›  Ignacio Vazquez-Abrams

实体引用和lxml

  •  9
  • Ignacio Vazquez-Abrams  · 技术社区  · 16 年前

    这是我的密码:

    from cStringIO import StringIO
    from lxml import etree
    
    xml = StringIO('''<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE root [
    <!ENTITY test "This is a test">
    ]>
    <root>
      <sub>&test;</sub>
    </root>''')
    
    d1 = etree.parse(xml)
    print '%r' % d1.find('/sub').text
    
    parser = etree.XMLParser(resolve_entities=False)
    d2 = etree.parse(xml, parser=parser)
    print '%r' % d2.find('/sub').text
    

    输出如下:

    'This is a test'
    None
    

    '&test;' ,即原始实体引用?

    1 回复  |  直到 16 年前
        1
  •  19
  •   MattH    16 年前

    “未解析”实体保留为元素节点的子节点 sub

    >>> print d2.find('/sub')[0]
    &test;
    >>> d2.find('/sub').getchildren()
    [&test;]