2014-04-18 18 views
5
<node> test 
    test 
    test 
</node> 

voglio che il mio parser XML leggere caratteri in <node> e:Rimozione duplicati di ritorno a capo/schede/spazi bianchi in elemento di carattere XML

  1. sostituire a capo e le tabulazioni in spazi e comporre spazi multipli in una sola. Di conseguenza, il testo dovrebbe apparire simile a "test test test".
  2. Se il nodo contiene caratteri codificati XML: tab(), newlines (&#xA;) o spazi bianchi (&#20;), devono essere lasciati.

Sto provando un codice qui sotto, ma conserva spazi bianchi duplicati.

dbf = DocumentBuilderFactory.newInstance(); 
    dbf.setIgnoringComments(true); 
    dbf.setNamespaceAware(namespaceAware); 
    db = dbf.newDocumentBuilder(); 
    doc = db.parse(inputStream); 

È il modo per fare ciò che voglio?

Grazie!

+0

provare ad aggiungere questa riga 'dbf.setIgnoringElementContentWhitespace (true);' – deanosaur

+0

Sfortunatamente, questo non funziona. Questa proprietà controlla come gestire gli spazi bianchi negli elementi non di testo – dbahdano

risposta

1

La prima parte - la sostituzione multipla white-space - è relativamente facile anche se non credo che il parser lo farà per voi:

InputSource stream = new InputSource(inputStream); 
XPath xpath = XPathFactory.newInstance().newXPath(); 
Document doc = (Document) xpath.evaluate("/", stream, XPathConstants.NODE); 

NodeList nodes = (NodeList) xpath.evaluate("//text()", doc, 
    XPathConstants.NODESET); 
for (int i = 0; i < nodes.getLength(); i++) { 
    Text text = (Text) nodes.item(i); 
    text.setTextContent(text.getTextContent().replaceAll("\\s{2,}", " ")); 
} 

// check results 
TransformerFactory.newInstance() 
    .newTransformer() 
    .transform(new DOMSource(doc), new StreamResult(System.out)); 

Questa è la parte più difficile:

Se il nodo contiene caratteri codificati XML: schede (&#x9;), nuove righe (&#xA;) o spazi bianchi (&#20;), devono essere lasciati.

Il parser sarà sempre girare "&#x9;" in "\t" - potrebbe essere necessario scrivere il proprio parser XML.

According to l'autore di Saxon:

Non credo che qualsiasi parser XML riporterà riferimenti di carattere numerici per l'applicazione - saranno sempre essere ampliati. In realtà, la tua applicazione non dovrebbe preoccuparsi di questo più di quanto importi di quanto spazio ci sia tra gli attributi.