Получение Одинаковых Сегментов

Minih

New Member
11.02.2014
1
0
#1
есть простое gui проиложение которое парсит с xml файла текст из элемента source в обычный txt файл и наоборот, из txt файлф конвертирует в xml файл, при нажатии соответст. кнопок в gui. Я затрудняюсь при имплементации следующей проблемы в моих имеющихся классах, как можно сделать в классе где генерируется итоговый xml файл, прочитать исходный xml файл, так чтобы для каждого предложения в элементе source из исходного xml файла соответствовало такое же кол-во предложений в итоговом xml файле? т.е чтобы сегменты были равны до и после конвертации. Т.е берётся xml файл на одном языке и из него получается текстовый файл из текста содержавшегося в элементе source, потом берётся этот же, но переведённый txt файл и конвертируется в итоговый xml файл. Вот классы, gui:
Код:
public class GUIDialog extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;
protected JPanel contentPane;
File file3;
File selectedDir;
File file;

public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public File getFile3() {
return file3;
}
public void setFile3(File file3) {
this.file3 = file3;
}
public File getselectedDir() {
return selectedDir;
} 

public GUIDialog() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 250, 250);
contentPane = new JPanel();
setContentPane(contentPane);
// Generierung von XML File Text File
JButton b1 = new JButton("Generieren");
// Auslesung vom Text File und bekommen XML File
JButton b3 = new JButton("Auslesen");
JButton b2 = new JButton("Beenden");
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
setTitle("Converter");


b1.setMinimumSize(b1.getPreferredSize());
contentPane.add(b1, new GridBagConstraints(0, 1, 1, 1, 0, 1,
GridBagConstraints.PAGE_END, GridBagConstraints.BOTH,
new Insets(5, 5, 5, 5), 0, 0));

b2.setMinimumSize(b2.getPreferredSize());
contentPane.add(b2, new GridBagConstraints(0, 1, 1, 1, 0, 1,
GridBagConstraints.PAGE_END, GridBagConstraints.BOTH,
new Insets(5, 5, 5, 5), 0, 0));

b3.setMinimumSize(b3.getPreferredSize());
contentPane.add(b3, new GridBagConstraints(0, 1, 1, 1, 0, 1,
GridBagConstraints.PAGE_END, GridBagConstraints.BOTH,
new Insets(5, 5, 5, 5), 0, 0));

}

@Override
public void actionPerformed(ActionEvent event) {
String cmd = event.getActionCommand();
if (cmd.equals("Beenden")) {
System.exit(0);
}

if (cmd.equals("Generieren")) {
Main m= new Main();
try {
m.dothis();
} catch (ParserConfigurationException e) {

e.printStackTrace();
} catch (SAXException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}

}
if (cmd.equals("Auslesen")) {
Element1 el=new Element1();
el.doit();

}
}


public static void main(String[] args) {

try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(GUIDialog.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(GUIDialog.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(GUIDialog.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(GUIDialog.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
}


java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new GUIDialog().setVisible(true);
}
});

}
класс где из xml получается txt файл:

Код:
public class Main extends GUIDialog {

private static final long serialVersionUID = 1L;
BufferedReader in;

// txt von xml generieren
public Main() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setDialogTitle("XLIFF Datei auswдhlen");
int ret = fileChooser.showDialog(fileChooser, "auswдhlen");
if (ret == JFileChooser.APPROVE_OPTION) {
file3 = fileChooser.getSelectedFile().getAbsoluteFile();
}

fileChooser.setDialogTitle("Text Speicherung");
// default file filter lцschen
fileChooser.removeChoosableFileFilter(fileChooser.getFileFilter());
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"txt file", "txt");
// XML file filter hinzufьgen
fileChooser.addChoosableFileFilter(filter);
// dialog anzeigen
int returnVal = fileChooser.showSaveDialog(contentPane);
if (returnVal == JFileChooser.APPROVE_OPTION) {
selectedDir = fileChooser.getSelectedFile();
String fname = selectedDir.getAbsolutePath();
if (!fname.endsWith(".txt")) {
selectedDir = new File(fname + ".txt");
}
}
}

public void dothis() throws ParserConfigurationException, SAXException,
IOException {
PrintWriter zzz = null;
// source file
in = new BufferedReader(new InputStreamReader(
new FileInputStream(file3), "UTF8"));
// target file
zzz = new PrintWriter(selectedDir, "UTF-8");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// Get DOM Builder
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(file3);
List<Elementt> empList = new ArrayList<>();

// Iteration durch den Knoten und die kinder Knoten extraktion
NodeList nodeList = document.getElementsByTagName("trans-unit");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node instanceof Element) {
Elementt emp = new Elementt();
emp.id = node.getAttributes().getNamedItem("id").getNodeValue();

NodeList childNodes = node.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
Node cNode = childNodes.item(j);

// Unterelementen von xml identifizieren
if (cNode instanceof Element) {
String content = cNode.getLastChild().getTextContent()
.trim();
switch (cNode.getNodeName()) {
case "source":
emp.source = content;
break;
}
}
}
empList.add(emp);
}

}
// Ausdrucken von Elementt liste
for (Elementt emp : empList) {
zzz.println(emp);
}
// schlieЯen txt file
zzz.close();
}
}
класс где из txt генерируется xml итоговый файл:

Код:
public class Element1 extends GUIDialog {

private static final long serialVersionUID = 1L;

int i;
int k = 0;
Element e = null;
BufferedReader in;
StreamResult out;
GUIDialog gd;
TransformerHandler th;
AttributesImpl atts;
AttributesImpl atts1;
String fname;
String[] elements;
BufferedReader sr;
Elementt emp1= new Elementt();
Main m= new Main();




public Element1() {
// fileChooser konfigurieren
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setDialogTitle("Textdatei auswдhlen");
int ret = fileChooser.showDialog(this, "auswдhlen");
if (ret == JFileChooser.APPROVE_OPTION) {
file = fileChooser.getSelectedFile().getAbsoluteFile();

}

fileChooser.setDialogTitle("XLIFF Speicherung");
// default file filter lцschen
fileChooser.removeChoosableFileFilter(fileChooser.getFileFilter()); 
FileNameExtensionFilter filter = new FileNameExtensionFilter("XLIFF file", "xlf");
// XML file filter hinzufьgen
fileChooser.addChoosableFileFilter(filter); 
// dialog anzeigen
int returnVal = fileChooser.showSaveDialog(contentPane);
if (returnVal == JFileChooser.APPROVE_OPTION) {
selectedDir = fileChooser.getSelectedFile();
fname = selectedDir.getAbsolutePath();
if (!fname.endsWith(".xlf")) {selectedDir = new File(fname + ".xlf");
}
}
}
public void doit() {
try {


in = new BufferedReader(new InputStreamReader(
new FileInputStream(file), "UTF8"));
out = new StreamResult(selectedDir);



initXML();
String str;
while ((str = in.readLine()) != null) {
elements = str.split("\n|((?<!\\d)\\.(?!\\d))");
for (i = 0; i < elements.length; i++)
process(str);


in.close();
}  closeXML();
}catch (Exception e) {
e.printStackTrace();
}
}

public void initXML() throws ParserConfigurationException,SAXException, UnsupportedEncodingException, FileNotFoundException, TransformerException {
// JAXP + SAX
SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
th = tf.newTransformerHandler();
Transformer serializer = th.getTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// XML ausgabe
serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
th.setResult(out);
th.startDocument();
atts = new AttributesImpl();
atts1 = new AttributesImpl();
atts1.addAttribute("", "", "xlmns","CDATA", "urn:oasis:names:tc:xliff:document:1.2");	
th.startElement("", "", "xliff", atts1);
th.startElement("", "", "file",null);
th.startElement("", "", "body", null);


}

public void process(String s) throws SAXException {
try {

atts.clear();
k++;
atts.addAttribute("", "", "id", "", "" + k);
th.startElement("", "", "trans-unit", atts);
th.startElement("", "", "target", null);
th.characters(elements[i].toCharArray(), 0, elements[i].length());
th.endElement("", "", "target");
th.endElement("", "", "trans-unit");
}
catch (Exception e) {
System.out.print("Out of bounds!");
}
}
public void closeXML() throws SAXException {
th.endElement("", "", "body");
th.endElement("", "", "file");
th.endElement("", "", "xliff");
th.endDocument();
}
буду очень признателен вашим ответам, т.е как в последнем классе имплементировать чтение исходного xml файла и для длины каждого предложения в source элементе, можно считать такое же кол-во предложений в итоговом файле. Спасибо.