Problema:
Quando lo spazio bianco è insignificante, la rappresentazione può essere molto significativa.Come gestisco lo spazio bianco con il elementtree di Python?
Spiegazione:
In XML Schema Part 2: Datatypes Second Edition l'vincolante sfaccettatura spazio bianco è definito per i tipi di derivati da stringa (http://www.w3.org/TR/xmlschema-2/#rf-whiteSpace). Se questa faccetta whiteSpace è sostituisce o collapse, il valore può essere modificato durante normalization.
C'è una nota alla fine di Section 4.3.6:
Il #xA notazione usata qui (e altrove in questa specifica) rappresenta l'Universal Character Set (UCS) punto di codice esadecimale Un feed (linea), che è indicato con U + 000A. Questa notazione deve essere distinta da & #xA ;, che è il riferimento di carattere XML a quello stesso punto di codice UCS .
Esempio:
Se il tipo di dati per un elemento elem ha un spazi vincolo collasso, "<elem> text </elem>"
dovrebbe diventare "text"
(spazi iniziali e finali rimosso), ma "<elem> text </elem>"
dovrebbe diventare " text "
(spazi codificato per riferimento carattere non rimosso).
Domande:
Quindi, o il costruttore parser/albero gestisce questa normalizzazione o questo è fatto in seguito.
- analisi informato:
- Dove faccio a fornire il parser o costruttore albero con le informazioni su come normalizzare qualche elemento XML?
- C'è qualcosa come
set_whitespace_normalization('./country/neighbor', 'collapse')
? - C'è un gancio come
normalize(content)
nel parser o nel generatore di alberi?
- Post processing
- Come posso accedere al contenuto originale di qualche elemento?
- C'è un
elem.original_text
, che può restituire " text 
"? - C'è un
elem.unnormalized_text
, che può restituire "text
"?
Vorrei utilizzare xml.etree di Python.ElementTree ma prenderò in considerazione qualsiasi altra libreria XML che fa il lavoro.
responsabilità:
Naturalmente è cattivo stile di dichiarare insignificante spazi bianchi (sostituire o crollo) e poi a imbrogliare utilizzando riferimenti di carattere. Nella maggior parte dei casi, è necessario modificare i dati o lo schema per impedirlo, ma a volte è necessario lavorare con schemi XML esteri e documenti XML esterni. E l'esistenza pura della nota citata sopra indica che gli editori di XML erano consapevoli di questo dilemma e non l'avevano deliberatamente impedito.