Dom Parser. Help.

Тема в разделе "Lotus + Java + LS2J", создана пользователем susinmn, 1 июн 2012.

  1. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Нужно из xml-строки взять значение тэга. Пытаюсь делать через dom.
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='vaja'> lotus.domino.Document abDoc = abDB.getDocumentByUNID(docUnID);
    DxlExporter dxlExporter = session.createDxlExporter();
    String exportResult = dxlExporter.exportDxl(abDoc);

    // Получить Document Builder Factory
    DocumentBuilderFactory factory =
    DocumentBuilderFactory.newInstance();

    // Включить проверку корректности и выключить пространства имен
    factory.setValidating(true);
    factory.setNamespaceAware(false);
    factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");

    DocumentBuilder docBuilder=null;
    try {
    docBuilder = factory.newDocumentBuilder();
    } catch (ParserConfigurationException e1) {
    e1.printStackTrace();
    }

    InputSource inSource = new InputSource();
    inSource.setCharacterStream(new StringReader(exportResult));

    org.w3c.dom.Document domdoc = null;
    try {
    domdoc = (org.w3c.dom.Document)docBuilder.parse(inSource);
    } catch (SAXException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    NodeList nodes = null;

    nodes = ((org.w3c.dom.Document)domdoc).getElementsByTagName("<jpeg>");
    String contentType = "image/jpeg";
    Element tag = (Element)nodes.item(0);
    exportResult = getCharacterDataFromElement(tag);

    if (exportResult == "") {
    nodes = ((org.w3c.dom.Document)domdoc).getElementsByTagName("<gif>");
    contentType = "image/gif";
    tag = (Element)nodes.item(0);
    exportResult = getCharacterDataFromElement(tag);
    }
    if (exportResult == "") {
    this.img = null;
    this.jLabel.setText("Фотография отсутствует");
    add(this.jLabel);
    return;
    }

    public static String getCharacterDataFromElement(Element e) {
    Node child = e.getFirstChild();
    if ((child instanceof CharacterData)) {
    CharacterData cd = (CharacterData)child;
    return cd.getData();
    }
    return "";
    }[/CODE]
    на
    Код (Text):
    domdoc = (org.w3c.dom.Document)docBuilder.parse(inSource);
    Ругается:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">java.io.FileNotFoundException: C:\Program Files\IBM\Lotus\Notes\framework\xmlschemas\domino_8_5_2.dtd (Системе не удается найти указанный путь.)</div></div><div class="sp-body"><div class="sp-content"> at java.io.FileInputStream.<init>(FileInputStream.java:112)
    at java.io.FileInputStream.<init>(FileInputStream.java:72)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.jav
    a:161)
    at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
    at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
    at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at LNUserPhoto.notesAppletInit(LNUserPhoto.java:112)
    at lotus.domino.JAppletBase.init(Unknown Source)
    at COM.ibm.JEmpower.applet.AppletFrame.run(AppletFrame.java:460)
    at java.lang.Thread.run(Thread.java:736)
    domdoc = (lotus.domino.Document)docBuilder.parse(inSource)
    java.lang.NullPointerException
    at LNUserPhoto.notesAppletInit(LNUserPhoto.java:124)
    at lotus.domino.JAppletBase.init(Unknown Source)
    at COM.ibm.JEmpower.applet.AppletFrame.run(AppletFrame.java:460)
    at java.lang.Thread.run(Thread.java:736)
    Начало xml:
    <!--shcode--><pre><code class='xml'><?xml version='1.0'?>
    <!DOCTYPE document SYSTEM 'xmlschemas/domino_8_5_2.dtd'>
    <document xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='2.0'
    replicaid='C325728A0024B208' form='TestRT'>[/CODE]Видимо и схему он ищет...
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    дхл эксопртеру сказать - шобы ДТД не мацал :)
    типа при валидации оно и ругаецо
    поставьте шобы компиляция сорцы включала - строка будет видна
    http://codeby.net/forum/threads/45176.html?vi...st&p=219462
     
  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    как понял она ищет ДТД от 8.5.2 - а оно там есть?
     
  4. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Вот же пишет
    Код (Text):
    java.io.FileNotFoundException: C:\Program Files\IBM\Lotus\Notes\framework\xmlschemas\domino_8_5_2.dtd (Системе не удается найти указанный путь.)
    и dxl посмотрел, начинается с
    Код (Text):
    <?xml version='1.0'?>
    <!DOCTYPE document SYSTEM 'xmlschemas/domino_8_5_2.dtd'>
    <document xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='2.0'
    replicaid='C325728A0024B208' form='TestRT'>Language: auto html
    На клиенте такого файла нет, нужно его игнорировать, но как?

    P.S.: Вот dxlExporter.setOutputDOCTYPE(false) походу, нашел. Сейчас проверю.

    Проверяю, нормально. +Тэги нужно было указывать не <gif>, а gif.
     
  5. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Далее вопрос. Как внутренность <notesbitmap> </notesbitmap> превраить в картинку? С jpeg работает...
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    опция - exporter.setConvertNotesBitmapsToGIF(true)
    и юзать гиф
    оно и так картинка - если с ней ничего не надо делать :)

    Добавлено:
    об этом я и говорил -
    но это не хорошо (в общем случае)
     
  7. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Спасибо, получилось. Но bitmap при конвертации теряет цвета. Можно ли это исправить?
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    честно говоря не обращал внимания :), но это неудивительно
    здесь важно понять - что делаем с картинкой (почему не устроил notesbimap)?
     
  9. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Как содержимое тега <notesbimap> в аплете превратить в картинку?
    Выгрузил документ в DXL через LS, на основе содержимого попробовал создать файл .bmp, картинка не отображается...

    В аплете с содержимым jpeg или gif делаю так (contentType или "image/jpeg" или "image/gif")
    Код (Text):
         MIMEEntity mimeEntity = abDoc.createMIMEEntity();
    Stream stream = session.createStream();
    stream.writeText(exportResult,Stream.EOL_CRLF);
    //mimeEntity.setContentFromText(stream, contentType, 1727);
    mimeEntity.setContentFromText(stream, contentType, MIMEEntity.ENC_BASE64);
    Stream stream2 = session.createStream();
    mimeEntity.decodeContent();
    mimeEntity.getContentAsBytes(stream2);
    stream2.setPosition(0);

    this.img = Toolkit.getDefaultToolkit().createImage(stream2.read());
     
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    вот оно чё...
    notesbitmap - проприетарь и его формат одному ИБМ ведом (ну могет кто хакал, но с ИБМ судиться...)
    коротко - методов я не знаю
    хотя... у ИБМ ведь как-то преобразуют, в хэПагах, отображение имеджей (из РТ), теоретически можно откопать их декодер в классах
     
Загрузка...

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