xxdavide84xx
18-01-2008, 21:40
Io ho un programma che per ora mi memorizza in 2 classi degli oggetti (Stile, Body)
Per ora ho fatto il parser dom...
Io alla fine devo confrontare alcune stringhe della classe Body con quelle della classe Stile.
E devo fare dei controlli es. il testo deve essere in Times New Romans e di carattere 12 e 13.
Se è tutto a posto devo generare un qualcosa (non so se sia megli un file.html o qualcos'altro) che mi dice che il file in questione rispetta tutti i vincoli.
Se invece non li rispetta dico. il file non rispetta questo o quel vincolo...
Se avete capito più o meno cosa intendo, ora che ho fatto il parser e prima di passare al confronto delle stringhe dovrei rendere il programma eseguibile da internet tramite una applet o una servlet....
Io non so quale delle 2 soluzioni sia la migliore, potete darmi una mano nella scelta e anche spiegarmi come fare a modificare il mio programma?
Questo è per ora il mio programma:
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class ParserDom {
Vector styleNodes = new Vector();
Vector styleObjects = new Vector();
Vector bodyNodes = new Vector();
Vector bodyObjects = new Vector();
public ParserDom() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
}
catch (ParserConfigurationException e) {
e.printStackTrace();
System.exit(1);
}
Document document = null;
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("Giovedì 17.txt", false)));
document = builder.parse(new File("C:\\Documents and settings\\Administrator\\Desktop\\DAVIDE\\tesi.xml"));
findStyleNodes(document);
createStyleObjects();
printStyles(pw);
findBodyNodes(document);
createBodyObjects();
printBody(pw);
pw.close();
}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
private void findStyleNodes(Node startingNode) {
NodeList childNodes = startingNode.getChildNodes();
for ( int i = 0; i < childNodes.getLength(); i++) {
Node actualNode = childNodes.item(i);
if ( isStyleNode(actualNode) )
styleNodes.addElement(actualNode);
if ( actualNode.hasChildNodes() )
findStyleNodes(actualNode);
}
}
private boolean isStyleNode(Node node) {
return node.getNodeName().equals("w:style");
}
private void createStyleObjects() {
for ( int i = 0; i < styleNodes.size(); i++) {
Node styleNode = (Node)styleNodes.elementAt(i);
Style style = new Style();
style.name = getAttributeValue(styleNode, "w:styleId");
Node basedNode = getChildNode(styleNode, "w:basedOn");
if ( basedNode != null )
style.based = getAttributeValue(basedNode, "w:val");
Node pPrNode = getChildNode(styleNode, "w:pPr");
if ( pPrNode != null ) {
Node pstileNode = getChildNode(pPrNode, "w:pStyle");
if ( pstileNode != null )
style.pstile = getAttributeValue(pstileNode, "w:val");
Node jcNode = getChildNode(pPrNode, "w:jc");
if ( jcNode != null )
style.jc = getAttributeValue(jcNode, "w:val");
}
Node paragraphNode = getChildNode(styleNode, "w:rPr");
if ( paragraphNode != null ) {
Node fontNode = getChildNode(paragraphNode, "wx:font");
if ( fontNode != null )
style.font = getAttributeValue(fontNode, "wx:val");
else {
Node rfontNode = getChildNode(paragraphNode, "w:rFonts");
if ( rfontNode != null )
style.font = getAttributeValue(rfontNode, "w:cs");
}
Node sizeNode = getChildNode(paragraphNode, "w:sz");
if ( sizeNode != null )
style.size = getAttributeValue(sizeNode, "w:val");
Node grassettoNode = getChildNode(paragraphNode, "w:b");
if ( grassettoNode != null )
style.grassetto = getAttributeValue(grassettoNode, "w:val");
Node italicoNode = getChildNode(paragraphNode, "w:i");
if ( italicoNode != null )
style.italico = getAttributeValue(italicoNode, "w:val");
Node sottolineatoNode = getChildNode(paragraphNode, "w:u");
if ( sottolineatoNode != null )
style.sottolineato = getAttributeValue(sottolineatoNode, "w:val");
}
styleObjects.addElement(style);
}
}
private String getAttributeValue(Node node, String attributeName) {
NamedNodeMap attributes = node.getAttributes();
if ( attributes == null )
return "";
Node item = attributes.getNamedItem(attributeName);
if ( item == null )
return "";
return item.getNodeValue();
}
private Node getChildNode(Node node, String nodeName) {
NodeList childNodes = node.getChildNodes();
for ( int i = 0; i < childNodes.getLength(); i++) {
Node childNode = childNodes.item(i);
if ( childNode.getNodeName().equals(nodeName) )
return childNode;
}
return null;
}
private void printStyles(PrintWriter pw) {
for ( int i = 0; i < styleObjects.size(); i++) {
Style style = (Style)styleObjects.elementAt(i);
System.out.println(style);
pw.println(style);
}
}
public static void main(String args[]) {
new ParserDom();
}
class Style {
String name;
String based;
String pstile;
String jc;
String font;
String size;
String grassetto;
String italico;
String sottolineato;
public String toString() {
StringBuffer buffer = new StringBuffer();
if ( name != null ) {
buffer.append("Stile: " + name + "\n");
if ( based != null )
buffer.append(" Basato su: " + based + "\n");
if ( pstile != null )
buffer.append(" pStyle: " + pstile + "\n");
if ( jc != null )
buffer.append(" Jc: " + jc + "\n");
if ( font != null )
buffer.append(" Font: " + font + "\n");
if ( size != null )
buffer.append(" Dimensione: " + size + "\n");
if ( grassetto != null )
buffer.append(" Grassetto " + grassetto + "\n");
if ( italico != null )
buffer.append(" Italico " + italico + "\n");
if ( sottolineato != null )
buffer.append(" Sottolineato: " + sottolineato + "\n");
}
return buffer.toString();
}
}
private void findBodyNodes(Node startingNode) {
NodeList childNodes = startingNode.getChildNodes();
for ( int i = 0; i < childNodes.getLength(); i++) {
Node actualNode = childNodes.item(i);
if ( isBodyNode(actualNode) )
bodyNodes.addElement(actualNode);
if ( actualNode.hasChildNodes() )
findBodyNodes(actualNode);
}
}
private boolean isBodyNode(Node node) {
return node.getNodeName().equals("w:p");
}
private void createBodyObjects() {
String stile = new String();
String jc = new String();
for ( int i = 0; i < bodyNodes.size(); i++) {
Node bodyNode = (Node)bodyNodes.elementAt(i);
stile = null;
jc = null;
Node paragraphNode = getChildNode(bodyNode, "w:pPr");
if ( paragraphNode != null ) {
Node stileNode = getChildNode(paragraphNode, "w:pStyle");
if ( stileNode != null )
stile = getAttributeValue(stileNode, "w:val");
Node jcNode = getChildNode(paragraphNode, "w:jc");
if ( jcNode != null )
jc = getAttributeValue(jcNode, "w:val");
}
NodeList pNode = getAllChildNode(bodyNode, "w:r");
for ( int j = 0; j < pNode.getLength(); j++) {
Body body = new Body();
body.stile = stile;
body.jc = jc;
Node rNode = (Node)pNode.item(j);
Node rPrNode = getChildNode(rNode, "w:rPr");
if ( rPrNode != null ) {
Node rstileNode = getChildNode(rPrNode, "w:rStyle");
if ( rstileNode != null )
body.stile = getAttributeValue(rstileNode, "w:val");
Node grassettoNode = getChildNode(rPrNode, "w:b");
if ( grassettoNode != null )
body.grassetto = getAttributeValue(grassettoNode, "w:val");
Node italicoNode = getChildNode(rPrNode, "w:i");
if ( italicoNode != null )
body.italico = getAttributeValue(italicoNode, "w:val");
Node sottolineatoNode = getChildNode(rPrNode, "w:u");
if ( sottolineatoNode != null )
body.sottolineato = getAttributeValue(sottolineatoNode, "w:val");
Node sizeNode = getChildNode(rPrNode, "w:sz");
if ( sizeNode != null )
body.size = getAttributeValue(sizeNode, "w:val");
}
Node pictNode = getChildNode(rNode, "w:pict");
if ( pictNode != null ) {
Node shapeNode = getChildNode(pictNode, "v:shape");
if ( shapeNode != null ) {
Node imagedataNode = getChildNode(shapeNode, "v:imagedata");
if ( imagedataNode != null ) {
body.titolopict = getAttributeValue(imagedataNode, "o:title");
body.formatopict = getAttributeValue(imagedataNode, "src");
}
}
}
Node wtNode = getChildNode(rNode, "w:t");
if ( wtNode != null ) {
Node testoNode = getChildNode(wtNode, "#text");
if ( testoNode != null )
body.testo = testoNode.getNodeValue();
}
bodyObjects.addElement(body);
}
}
}
private void printBody(PrintWriter pw) {
for ( int i = 0; i < bodyObjects.size(); i++) {
Body body = (Body)bodyObjects.elementAt(i);
System.out.println(body);
pw.println(body);
}
}
class Body {
String stile;
String jc;
String rstile;
String grassetto;
String italico;
String sottolineato;
String size;
String testo;
String titolopict;
String formatopict;
public String toString() {
StringBuffer buffer = new StringBuffer();
if ( stile != null )
buffer.append("Stile body: " + stile + "\n");
if ( jc != null )
buffer.append(" Jc body: " + jc + "\n");
if ( rstile != null )
buffer.append(" Rstile body " + rstile + "\n");
if ( grassetto != null )
buffer.append(" Grassetto body " + grassetto + "\n");
if ( italico != null )
buffer.append(" Italico body " + italico + "\n");
if ( sottolineato != null )
buffer.append(" Sottolineato body: " + sottolineato + "\n");
if ( size != null )
buffer.append(" Dimensione body: " + size + "\n");
if ( testo != null )
buffer.append(" Testo body: " + testo + "\n");
if ( titolopict != null )
buffer.append(" Nome immagine body: " + titolopict + "\n");
if ( formatopict != null )
buffer.append(" Formato immagine body: " + formatopict + "\n");
return buffer.toString();
}
}
private NodeList getAllChildNode(Node node, String nodeName) {
ArrayNodeList arrNodeList = new ArrayNodeList();
NodeList childNodes = node.getChildNodes();
for ( int i = 0; i < childNodes.getLength(); i++) {
Node childNode = childNodes.item(i);
if ( childNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE && childNode.getNodeName().equals(nodeName) ) {
arrNodeList.add(childNode);
}
}
return arrNodeList;
}
class ArrayNodeList implements NodeList {
private ArrayList nodesArray = new ArrayList();
public void add(Node n) {
nodesArray.add(n);
}
public int getLength() {
return nodesArray.size();
}
public Node item(int index) {
try {
return (Node)nodesArray.get(index);
}
catch (IndexOutOfBoundsException e) {
return null;
}
}
}
}
Per ora ho fatto il parser dom...
Io alla fine devo confrontare alcune stringhe della classe Body con quelle della classe Stile.
E devo fare dei controlli es. il testo deve essere in Times New Romans e di carattere 12 e 13.
Se è tutto a posto devo generare un qualcosa (non so se sia megli un file.html o qualcos'altro) che mi dice che il file in questione rispetta tutti i vincoli.
Se invece non li rispetta dico. il file non rispetta questo o quel vincolo...
Se avete capito più o meno cosa intendo, ora che ho fatto il parser e prima di passare al confronto delle stringhe dovrei rendere il programma eseguibile da internet tramite una applet o una servlet....
Io non so quale delle 2 soluzioni sia la migliore, potete darmi una mano nella scelta e anche spiegarmi come fare a modificare il mio programma?
Questo è per ora il mio programma:
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class ParserDom {
Vector styleNodes = new Vector();
Vector styleObjects = new Vector();
Vector bodyNodes = new Vector();
Vector bodyObjects = new Vector();
public ParserDom() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
}
catch (ParserConfigurationException e) {
e.printStackTrace();
System.exit(1);
}
Document document = null;
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("Giovedì 17.txt", false)));
document = builder.parse(new File("C:\\Documents and settings\\Administrator\\Desktop\\DAVIDE\\tesi.xml"));
findStyleNodes(document);
createStyleObjects();
printStyles(pw);
findBodyNodes(document);
createBodyObjects();
printBody(pw);
pw.close();
}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
private void findStyleNodes(Node startingNode) {
NodeList childNodes = startingNode.getChildNodes();
for ( int i = 0; i < childNodes.getLength(); i++) {
Node actualNode = childNodes.item(i);
if ( isStyleNode(actualNode) )
styleNodes.addElement(actualNode);
if ( actualNode.hasChildNodes() )
findStyleNodes(actualNode);
}
}
private boolean isStyleNode(Node node) {
return node.getNodeName().equals("w:style");
}
private void createStyleObjects() {
for ( int i = 0; i < styleNodes.size(); i++) {
Node styleNode = (Node)styleNodes.elementAt(i);
Style style = new Style();
style.name = getAttributeValue(styleNode, "w:styleId");
Node basedNode = getChildNode(styleNode, "w:basedOn");
if ( basedNode != null )
style.based = getAttributeValue(basedNode, "w:val");
Node pPrNode = getChildNode(styleNode, "w:pPr");
if ( pPrNode != null ) {
Node pstileNode = getChildNode(pPrNode, "w:pStyle");
if ( pstileNode != null )
style.pstile = getAttributeValue(pstileNode, "w:val");
Node jcNode = getChildNode(pPrNode, "w:jc");
if ( jcNode != null )
style.jc = getAttributeValue(jcNode, "w:val");
}
Node paragraphNode = getChildNode(styleNode, "w:rPr");
if ( paragraphNode != null ) {
Node fontNode = getChildNode(paragraphNode, "wx:font");
if ( fontNode != null )
style.font = getAttributeValue(fontNode, "wx:val");
else {
Node rfontNode = getChildNode(paragraphNode, "w:rFonts");
if ( rfontNode != null )
style.font = getAttributeValue(rfontNode, "w:cs");
}
Node sizeNode = getChildNode(paragraphNode, "w:sz");
if ( sizeNode != null )
style.size = getAttributeValue(sizeNode, "w:val");
Node grassettoNode = getChildNode(paragraphNode, "w:b");
if ( grassettoNode != null )
style.grassetto = getAttributeValue(grassettoNode, "w:val");
Node italicoNode = getChildNode(paragraphNode, "w:i");
if ( italicoNode != null )
style.italico = getAttributeValue(italicoNode, "w:val");
Node sottolineatoNode = getChildNode(paragraphNode, "w:u");
if ( sottolineatoNode != null )
style.sottolineato = getAttributeValue(sottolineatoNode, "w:val");
}
styleObjects.addElement(style);
}
}
private String getAttributeValue(Node node, String attributeName) {
NamedNodeMap attributes = node.getAttributes();
if ( attributes == null )
return "";
Node item = attributes.getNamedItem(attributeName);
if ( item == null )
return "";
return item.getNodeValue();
}
private Node getChildNode(Node node, String nodeName) {
NodeList childNodes = node.getChildNodes();
for ( int i = 0; i < childNodes.getLength(); i++) {
Node childNode = childNodes.item(i);
if ( childNode.getNodeName().equals(nodeName) )
return childNode;
}
return null;
}
private void printStyles(PrintWriter pw) {
for ( int i = 0; i < styleObjects.size(); i++) {
Style style = (Style)styleObjects.elementAt(i);
System.out.println(style);
pw.println(style);
}
}
public static void main(String args[]) {
new ParserDom();
}
class Style {
String name;
String based;
String pstile;
String jc;
String font;
String size;
String grassetto;
String italico;
String sottolineato;
public String toString() {
StringBuffer buffer = new StringBuffer();
if ( name != null ) {
buffer.append("Stile: " + name + "\n");
if ( based != null )
buffer.append(" Basato su: " + based + "\n");
if ( pstile != null )
buffer.append(" pStyle: " + pstile + "\n");
if ( jc != null )
buffer.append(" Jc: " + jc + "\n");
if ( font != null )
buffer.append(" Font: " + font + "\n");
if ( size != null )
buffer.append(" Dimensione: " + size + "\n");
if ( grassetto != null )
buffer.append(" Grassetto " + grassetto + "\n");
if ( italico != null )
buffer.append(" Italico " + italico + "\n");
if ( sottolineato != null )
buffer.append(" Sottolineato: " + sottolineato + "\n");
}
return buffer.toString();
}
}
private void findBodyNodes(Node startingNode) {
NodeList childNodes = startingNode.getChildNodes();
for ( int i = 0; i < childNodes.getLength(); i++) {
Node actualNode = childNodes.item(i);
if ( isBodyNode(actualNode) )
bodyNodes.addElement(actualNode);
if ( actualNode.hasChildNodes() )
findBodyNodes(actualNode);
}
}
private boolean isBodyNode(Node node) {
return node.getNodeName().equals("w:p");
}
private void createBodyObjects() {
String stile = new String();
String jc = new String();
for ( int i = 0; i < bodyNodes.size(); i++) {
Node bodyNode = (Node)bodyNodes.elementAt(i);
stile = null;
jc = null;
Node paragraphNode = getChildNode(bodyNode, "w:pPr");
if ( paragraphNode != null ) {
Node stileNode = getChildNode(paragraphNode, "w:pStyle");
if ( stileNode != null )
stile = getAttributeValue(stileNode, "w:val");
Node jcNode = getChildNode(paragraphNode, "w:jc");
if ( jcNode != null )
jc = getAttributeValue(jcNode, "w:val");
}
NodeList pNode = getAllChildNode(bodyNode, "w:r");
for ( int j = 0; j < pNode.getLength(); j++) {
Body body = new Body();
body.stile = stile;
body.jc = jc;
Node rNode = (Node)pNode.item(j);
Node rPrNode = getChildNode(rNode, "w:rPr");
if ( rPrNode != null ) {
Node rstileNode = getChildNode(rPrNode, "w:rStyle");
if ( rstileNode != null )
body.stile = getAttributeValue(rstileNode, "w:val");
Node grassettoNode = getChildNode(rPrNode, "w:b");
if ( grassettoNode != null )
body.grassetto = getAttributeValue(grassettoNode, "w:val");
Node italicoNode = getChildNode(rPrNode, "w:i");
if ( italicoNode != null )
body.italico = getAttributeValue(italicoNode, "w:val");
Node sottolineatoNode = getChildNode(rPrNode, "w:u");
if ( sottolineatoNode != null )
body.sottolineato = getAttributeValue(sottolineatoNode, "w:val");
Node sizeNode = getChildNode(rPrNode, "w:sz");
if ( sizeNode != null )
body.size = getAttributeValue(sizeNode, "w:val");
}
Node pictNode = getChildNode(rNode, "w:pict");
if ( pictNode != null ) {
Node shapeNode = getChildNode(pictNode, "v:shape");
if ( shapeNode != null ) {
Node imagedataNode = getChildNode(shapeNode, "v:imagedata");
if ( imagedataNode != null ) {
body.titolopict = getAttributeValue(imagedataNode, "o:title");
body.formatopict = getAttributeValue(imagedataNode, "src");
}
}
}
Node wtNode = getChildNode(rNode, "w:t");
if ( wtNode != null ) {
Node testoNode = getChildNode(wtNode, "#text");
if ( testoNode != null )
body.testo = testoNode.getNodeValue();
}
bodyObjects.addElement(body);
}
}
}
private void printBody(PrintWriter pw) {
for ( int i = 0; i < bodyObjects.size(); i++) {
Body body = (Body)bodyObjects.elementAt(i);
System.out.println(body);
pw.println(body);
}
}
class Body {
String stile;
String jc;
String rstile;
String grassetto;
String italico;
String sottolineato;
String size;
String testo;
String titolopict;
String formatopict;
public String toString() {
StringBuffer buffer = new StringBuffer();
if ( stile != null )
buffer.append("Stile body: " + stile + "\n");
if ( jc != null )
buffer.append(" Jc body: " + jc + "\n");
if ( rstile != null )
buffer.append(" Rstile body " + rstile + "\n");
if ( grassetto != null )
buffer.append(" Grassetto body " + grassetto + "\n");
if ( italico != null )
buffer.append(" Italico body " + italico + "\n");
if ( sottolineato != null )
buffer.append(" Sottolineato body: " + sottolineato + "\n");
if ( size != null )
buffer.append(" Dimensione body: " + size + "\n");
if ( testo != null )
buffer.append(" Testo body: " + testo + "\n");
if ( titolopict != null )
buffer.append(" Nome immagine body: " + titolopict + "\n");
if ( formatopict != null )
buffer.append(" Formato immagine body: " + formatopict + "\n");
return buffer.toString();
}
}
private NodeList getAllChildNode(Node node, String nodeName) {
ArrayNodeList arrNodeList = new ArrayNodeList();
NodeList childNodes = node.getChildNodes();
for ( int i = 0; i < childNodes.getLength(); i++) {
Node childNode = childNodes.item(i);
if ( childNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE && childNode.getNodeName().equals(nodeName) ) {
arrNodeList.add(childNode);
}
}
return arrNodeList;
}
class ArrayNodeList implements NodeList {
private ArrayList nodesArray = new ArrayList();
public void add(Node n) {
nodesArray.add(n);
}
public int getLength() {
return nodesArray.size();
}
public Node item(int index) {
try {
return (Node)nodesArray.get(index);
}
catch (IndexOutOfBoundsException e) {
return null;
}
}
}
}