2013-06-07 10 views
5

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>&#x20;text&#x20;</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 "&#x20;text&#x20;"?
    • 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.

risposta