Как файл в текст загонять?

  • Автор темы Автор темы seoman2
  • Дата начала Дата начала

seoman2

Green Team
17.02.2010
507
1
BIT
72
У кого-то получалось вариантом
Код:
xml = xml + {<prilojenie>} + doc.getItemValue("ПРИЛОЖЕНИЯ_")(0) + {</prilojenie>} + Chr(13)
записывать в файл вложения из поля ПРИЛОЖЕНИЯ_ типа Rich Text?

Вариант
Код:
pril = doc.GetItemValue( "ПРИЛОЖЕНИЯ_" )
Forall m In pril
total = total + m
End Forall
xml = xml + {<prilojenie>} + total + {</prilojenie>} + Chr(13)
pril всегда пустое почему то....
 
что пытаетесь сделать?
то что написали выше - это (мягко говоря) некорректно впринципе
 
Хочу в переменную xml загнать содержимое поля "ПРИЛОЖЕНИЯ_" типа Rich Text, чтобы потом сохранить переменную xml в файл с расширением xml.
Сделать что то аналогичное выгрузке CreateDXLExporter.
 
Попробуйте так. Это готовый вариант по выгрузке в dxl текущего документа вместе с вложением для вашей базы.

Код:
Sub Click(Source As Button)
On Error Goto errh
Dim w As New NotesUIWorkspace
Dim s As New NotesSession
Dim doc As NotesDocument
Dim stream As NotesStream
Dim exporter As NotesDXLExporter
Dim dt As New NotesDateTime(Today)
Dim filePath As String
Dim fileName As String
Dim xmlTxt As String
Dim file As Integer
file = Freefile

Set doc = w.CurrentDocument.Document
filePath = "C:\text\"
fileName = "выгрузка от "+dt.DateOnly+{.xml}
Set stream = s.CreateStream
Call stream.Truncate
Set exporter = s.CreateDXLExporter(doc, stream)

Call exporter.Process

Open filePath+fileName For Output As file
Write #file, stream.ReadText
Close file

Goto endSub
errh:
Print {Error: "} & Error & {" in line } & Erl & {.}
Resume endSub
endSub:
End Sub
 
Хочу в переменную xml загнать содержимое поля "ПРИЛОЖЕНИЯ_" типа Rich Text, чтобы потом сохранить переменную xml в файл с расширением xml.
Сделать что то аналогичное выгрузке CreateDXLExporter.

можно создать свой хмл, например так
Dim ses As New NotesSession
Dim parser As NotesDOMParser
Dim dom As NotesDOMDocumentNode
Dim instrNode As NotesDOMProcessingInstructionNode
Dim rootElement As NotesDOMElementNode
Dim child As NotesDOMElementNode
Dim stream As NotesStream

Set parser = ses.Createdomparser
Set dom = parser.Document

Set rootElement = dom.Createelementnode( "root_tag" )
Set instrNode = dom.CreateProcessingInstructionNode( {xml}, {version=1.0 encoding=Windows-1251})
Call rootElement.AppendChild( instrNode )

Set child = dom.Createelementnode( "xml_tag" )
Call child.Appendchild( dom.Createtextnode( "Здесь значение, полученное из поля" ) )
Call rootElement.Appendchild( child )

Set stream = ses.Createstream()
Call stream.open( "c:\test.xml", "Windows-1251" )
Call stream.truncate()
Call parser.Setoutput( stream )
Call parser.Serialize()
Call stream.Close()

писал сходу работоспособность не проверял.. должно работать
 
Eugen - выложите Ваш svg2gfx-simple.xsl и Ваш рабочий код с CreateXSLTransformer, не с поста 1.

Проблема сделать проблема сделать валидный .xsl для обработки XML.
Пример:
XML содержит:
<item name='ЗАГОЛОВОК'><text>текст заголовка</text></item>
xsl содержит:
<xsl:value-of select="ЗАГОЛОВОК"/>
но на выходе CreateXSLTransformer хмлка содержит строку:
xsl:value-of select="ЗАГОЛОВОК"/>
 
Надо использовать класс NotesRichTextItem. И, таким способом, получите только текст, без картинок, вложений и т.д.
Вложения можно перегнать в Base64, но получится "шило на мыло".
 
Не получается выгрузить в текстовую строку поле "ПРИЛОЖЕНИЯ_" типа RichText.

Dim rtitem As NotesRichTextItem
Set rtitem = New NotesRichTextItem ( doc, "ПРИЛОЖЕНИЯ_")
Forall m In rtitem.values
total = total + m
End Forall

xml = xml + {<prilojenie>} + total + {</prilojenie>} + Chr(13)
 
Код:
Set rtitem = doc.GetFirstItem("ПРИЛОЖЕНИЯ_")
' plainText$ = notesRichTextItem.GetUnformattedText( )
 
Мне не текст с поля надо, а содержимое rtitem.EmbeddedObjects(0)
Выгружать в файл
Call rtitem.ExtractFile( "c:\samples\" & o.Source )
, а потом его как текст в xml загонять?
 
вот и добрались до сути.
Вы хелп про EmbeddedObjects property для notesRichTextItem читали?
Там операции с объектами: аттачменты(файлы), встроенное OLE и ссылки.
Так просто, с ходу, это не получить.
Что конкретно вам нужно из вашего RT поля?
Список файлов? Это просто.
Содержимое файлов? Тут сложнее, особенно с картинками и PDF и кучей всего другого.
Список ссылок? Относительно просто, вопрос что нужно.
 
Задача, выгружать (потом загружать) в XML (определенного формата) документ у которого в RT поле ПРИЛОЖЕНИЯ_ могут быть различные вложения - doc, pdf.
Понятно, что можно с CreateXSLTransformer все сделать, но пока отрабатываю вариант с записью полей в переменную.
 
Задача, выгружать (потом загружать) в XML (определенного формата) документ у которого в RT поле ПРИЛОЖЕНИЯ_ могут быть различные вложения - doc, pdf.
Понятно, что можно с CreateXSLTransformer все сделать, но пока отрабатываю вариант с записью полей в переменную.
Ну, допустим в этом поле есть вложение - файл Microsoft Word. Как вы хотите увидеть его внутри XML файла? В каком виде?
 
В виде аналогичном как делает выгрузку CreateDXLExporter.
Если вас не устраивают штатные средства (DXLExporter) или по каким-то причинам вы не можете ими воспользоваться, то вам надо изучать такие вещи, как MIME, BASE64 и т.к. вложение может быть сжатым (зависит от настроек клиента, где было сделано вложение), то ещё и LZ1.
 
garrick
вложение может быть сжатым (зависит от настроек клиента, где было сделано вложение)
Немного оффтоп, но если файл крепился от пользователя с клиентом 8+, то файл сжимается всегда, даже если LZ1 в базе выключено.
Если файл крепился от сервера, то тут уже настройки работают для базы.
 
garrick

Немного оффтоп, но если файл крепился от пользователя с клиентом 8+, то файл сжимается всегда, даже если LZ1 в базе выключено.
Если файл крепился от сервера, то тут уже настройки работают для базы.
Согласен. Но, я думаю, что если выгрузить файл вложения на диск, то Lotus Notes сам должен "разжать" его в исходное состояние, если это необходимо. Потом этот файл перекодировать в BASE64 и то, что получится вставить в XML. Ну, и не забыть после этого удалить временный файл вложения.
 
Вот к примеру есть у меня
obj = rtitem.EmbeddedObjects(0)
И я хочу obj загнать в текстовую переменную как BASE64.
ка кподключать функцию notesStreamToBase64(obj) ?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!