2014-08-29 6 views
8

Sto cercando di capire alcune parti del POI di Apache. Ad esempio, sto cercando di ottenere testo (o tabella, ecc.) Da un file docx esistente. Ad esempio there is a method getParagraph(..CTP p) in XWPFDocument:
Restituisce "un paragrafo con una classe CTP p". Ma cos'è la classe CTP? Ho cercato all'interno della struttura xml del documento, ma non ho trovato nulla di simile. Di conseguenza non so come chiamare un mthod in primo luogo. There is also a method getTable(CTTbl CTTbl) per lo stesso oggetto XWPFDocument, che restituisce "una tabella dal suo oggetto CTtbl.Che cosa sono le classi CTP, CTTbl (oggetti) nel POI di Apache?

Sembra che ci sia un CP * qualcosa per ogni parte/tipo di dati all'interno di documenti ooxml, quindi mi piacerebbe capire come funziona Inoltre, dalla documentazione, sembra che questi metodi siano l'unico modo diretto per ottenere elementi senza incollarli nella raccolta o indovinare la loro posizione

risposta

7

Le classi CTx sono XMLBeans wrappers. Sono generate automaticamente dal file XML Schema di specifiche OOXML specificate

Se l'elemento xml nel file è uno p, il wrapper XMLBeans risultante per OOXML sarà CTP. Se è table, allora sarà CTTable. Lo spazio dei nomi dell'elemento xml si trasformerà nel pacchetto della classe, quindi se si hanno due elementi diversi con lo stesso nome locale ma diversi spazi dei nomi, è così che si sarà in grado di capire quale si desidera.

Se si dispone di una scelta, non lavorare con le classi CT. Sono di basso livello e richiedono di conoscere la struttura e il formato del formato file sottostante. Normalmente sono richiesti solo per casi d'uso avanzati.

Quasi tutto ciò che vorrete fare per un caso d'uso comune sarà possibile con le classi di wrapping usermodel dei POI Apache, usate solo quelle se potete.