Ir para conteúdo
Fórum Script Brasil
  • 0

Xml Parsing Com Python


cavotta

Pergunta

Olá pessoal,

Estou aprendendo python ainda, especificamente a parte de lidar com XML.

Eu fiz um parser pra XML em python, mas estou tendo problemas com caracteres do português:

arquivo xml: página.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<texto>Ola mundo!
Esta é minha primeira pagina gerada com python</texto>
parser do xml: parseText.py:
# -*- coding: iso-8859-1 -*-
#! /usr/bin/env python

import xml.sax.handler

class BookHandler(xml.sax.handler.ContentHandler):
  def __init__(self):
      self.buffer = ""

#  def startElement(self, name, attributes):

  def characters(self, data):
      if data == '\n':
          self.buffer += "<br>"
      self.buffer += data

#  def endElement(self, name):

import xml.sax
import pprint

def ParseText(XMLfilename):
    parser = xml.sax.make_parser()
    handler = BookHandler()
    parser.setContentHandler(handler)
    parser.parse(XMLfilename)
    return handler.buffer
Trecho do meu gerador de páginas: file.py:
#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-

# variáveis
text_name = "exemplo"

f = open(text_name+".html",'w+')

# parse text
from parseText import ParseText
texto = ParseText('pagina.xml')
f.write(texto+'\n')

# script identifier
f.write("<!-- Página gerada automaticamente por um script python\n\
written in Eclipse-Pydev -->\n")
f.close()

Eu estou tendo o seguinte erro:

QUOTE

f.write(texto+'\n')

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 20: ordinal not in range(128)

Que se deve ou 'é' do 'página.xml'

Como proceder? Obrigado.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá, obrigado por responder, mas não deu certo não; Agora deu erro com isso:

Traceback (most recent call last):
  File "/home/kunigami/workspace/test/src/xml/file.py", line 19, in ?
    f.write("</head>\n<body>\n<div id=\"tudo\">\n\
  File "/usr/lib/python2.4/codecs.py", line 501, in write
    return self.writer.write(data)
  File "/usr/lib/python2.4/codecs.py", line 178, in write
    data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 50: ordinal not in range(128)
Isso porque eu tentei:
f.write("ééééé")

O engraçado é que antes isso funcionava, mas a string que o parser retorna não funciona! O problema deve estar no modo como o parser está retornando a string!?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...