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

Тема в разделе "Java", создана пользователем Minih, 12 фев 2014.

  1. Minih

    Minih New Member

    Регистрация:
    11 фев 2014
    Сообщения:
    1
    Симпатии:
    0
    есть простое gui проиложение которое парсит с xml файла текст из элемента source в обычный txt файл и наоборот, из txt файлф конвертирует в xml файл, при нажатии соответст. кнопок в gui. Я затрудняюсь при имплементации следующей проблемы в моих имеющихся классах, как можно сделать в классе где генерируется итоговый xml файл, прочитать исходный xml файл, так чтобы для каждого предложения в элементе source из исходного xml файла соответствовало такое же кол-во предложений в итоговом xml файле? т.е чтобы сегменты были равны до и после конвертации. Т.е берётся xml файл на одном языке и из него получается текстовый файл из текста содержавшегося в элементе source, потом берётся этот же, но переведённый txt файл и конвертируется в итоговый xml файл. Вот классы, gui:
    Код (Text):
    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 файл:

    Код (Text):
    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 итоговый файл:

    Код (Text):
    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 элементе, можно считать такое же кол-во предложений в итоговом файле. Спасибо.
     
Загрузка...

Поделиться этой страницей