Python libxml2 разбора xml с китайскими символами - PullRequest
0 голосов
/ 19 ноября 2010

Я столкнулся с проблемами кодирования при использовании libxml2 в python для анализа китайских символов1009 * как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

С lxml все проще, и они работают. Это Pythonic привязка для библиотеки libxml2 и прекрасно работает.

>>> from lxml import etree
>>> x = etree.fromstring('''<r><e RoleID="3247" Name="中文"></e></r>''')
>>> name = x[0].get('Name')
>>> print name
中文

И да, XPath также поддерживается. Документация здесь .

Что касается вашей программы, взгляните на это:

# -*- coding: utf-8 -*-

import libxml2

def output(data):
  doc = libxml2.parseDoc(data)
  ctxt = doc.xpathNewContext()
  res_rslt = ctxt.xpathEval("/r/e/attribute::Name")
  return res_rslt[0]

data =  u'''<?xml version="1.0" encoding="UTF-8"?><r><e RoleID="3247" Name="中文"></e></r>'''.encode("UTF-8")

print output(data)
0 голосов
/ 19 ноября 2010

Мой ответ на подобные вещи всегда звучит так: «Используйте Красивый суп ».И я всегда за это тоже голосую (что, как мне кажется, показывает, что другие со мной согласны, что это хорошо).

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(u'''<r><e RoleID="3247" Name="中文"></e></r>''')
>>> print soup.r.e['name']
中文

Дело в том, что libxml2 преобразует эти символы в соответствующие объекты XML, которыедля XML это правильно.Beautiful Soup не имеет таких представлений о том, что нужно быть правильным, поэтому он просто дает вам то, что вы хотите.

(Обратите внимание, что в этом случае использование либо u'...', либо '...' будет работать;Я просто обозначил его как unicode, потому что так он себя чувствует лучше - что бы вы ни делали, Beautiful Soup дает вам Unicode .)

...