Skip to content

Fix XMLSyntaxError "Namespace prefix mailto for dade on a is not defined" in convert_html_to_xml step 30#160

Draft
Copilot wants to merge 2 commits intomainfrom
copilot/fix-xml-syntax-error
Draft

Fix XMLSyntaxError "Namespace prefix mailto for dade on a is not defined" in convert_html_to_xml step 30#160
Copilot wants to merge 2 commits intomainfrom
copilot/fix-xml-syntax-error

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 28, 2026

O que esse PR faz?

Corrige o XMLSyntaxError: Namespace prefix mailto for dade on a is not defined que aborta convert_html_to_xml_step_30_embed_html (e cascateia para XML Status BLOCKED no Article Proc) quando o HTML de origem traz atributos malformados com prefixo de namespace não declarado, p.ex. <a mailto:dade="...">.

  • Adiciona remove_invalid_namespace_attributes(tree) em scielo_classic_website/htmlbody/html_fixer.py: percorre a árvore lxml e remove atributos cujo nome contém : mas o prefixo não está declarado. Preserva xml/xlink e atributos já mapeados em notação Clark ({uri}localname).
  • Invoca a limpeza em load_html e get_fixed_html, cobrindo ambos os caminhos usados por HTMLContenthtml_to_nodeMainHTMLPipe.
  • Acrescenta TestRemoveInvalidNamespaceAttributes em tests/test_html_fixer.py (7 casos, incluindo o cenário em que o valor do atributo contém > — caso em que a limpeza textual remove_namespaces_from_content falha).

Onde a revisão poderia começar?

scielo_classic_website/htmlbody/html_fixer.py — função remove_invalid_namespace_attributes e suas chamadas em load_html / get_fixed_html.

Como este poderia ser testado manualmente?

from lxml import etree, html
from scielo_classic_website.htmlbody import html_fixer

tree = html.fromstring('<html><body><a mailto:dade="x" href="y">l</a></body></html>')
html_fixer.remove_invalid_namespace_attributes(tree)
xml = etree.tostring(tree, method="xml").decode()
etree.fromstring(xml)  # antes: XMLSyntaxError; agora: OK

Ou rodar pytest tests/test_html_fixer.py.

Algum cenário de contexto que queira dar?

lxml.html.fromstring aceita mailto:dade como nome literal de atributo. Quando o <body> parseado é inserido no XML do artigo e re-serializado por EndPipe, o StartPipe do step 30 chama ET.fromstring(...) (parser XML estrito), que interpreta mailto: como prefixo de namespace inexistente e levanta XMLSyntaxError. A limpeza textual existente (remove_namespaces_from_content) é frágil — falha quando o valor do atributo contém > ou aspas. Por isso o saneamento é feito no nível da árvore após o parsing.

Screenshots

N/A.

Quais são tickets relevantes?

Issue reportada em scieloorg/scielo_migration referente à tarefa migrate_and_publish_articles com XML Status BLOCKED e traceback lxml.etree.XMLSyntaxError: Namespace prefix mailto for dade on a is not defined.

Referências

Copilot AI changed the title [WIP] Fix XMLSyntaxError during HTML to XML conversion Fix XMLSyntaxError "Namespace prefix mailto for dade on a is not defined" in convert_html_to_xml step 30 Apr 28, 2026
Copilot AI requested a review from robertatakenaka April 28, 2026 20:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migração Artigo HTML: Erro XMLSyntaxError:Convert HTML to XML - step 3 failed convert_html_to_xml_step_30_embed_html

2 participants