Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/469: Рейтинг темы: голосов - 469, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
1

Dxl Importer

12.11.2009, 11:06. Показов 87322. Ответов 69
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Вопрос.
Вот кусок кода
<!--shcode--><pre><code class=vb>Call Me.Exporter.Setinput( doc )
Call Me.Exporter.Setoutput( Me.Stream )
Call Me.Exporter.Process()

Set Me.domParser = Me.session.CreateDOMParser()
Call Me.domParser.Setinput( Me.Stream )
Call Me.domParser.Setoutput( tmpStream )
Me.domParser.Process

Call Me.Importer.Setinput( Me.domParser )
Call Me.Importer.SetOutput( Me.curDb )
Call Me.importer.Process[/CODE]
Ну так вот... документ нормально экспортируется в поток... нормально парсится... но вот импортироваться не хочет.
Лог importera
"<?xml version=1.0?><DXLImporterLog></DXLImporterLog>"

меня смущает вот эта строка Call Me.Importer.Setinput( Me.domParser )
Но вот никак не пойму как надо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2009, 11:06
Ответы с готовыми решениями:

Баг в Importer.importdxl
Всем привет Понадобилось воспользоваться функционалом DXL... и... о надо же... он почти работает....

Dxl R8 To R6
Делаю экспорт документа в DXL из восьмёрки. При импорте там же в восьмерке всё проходит нормально....

Dxl
Предыстория: Я так часто натыкался на этом форуме на выражения типа «ДХЛ тебе в помощь…» и т.п.,...

Переобразование Dxl
в Rich тексте лежит DXl &lt;?xml version=1.0 encoding=utf-8 ?&gt; &lt;database...

69
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 11:40 2
Не надо стрима.
Передавай DXLExporter в DOMParser напрямую.
А DOMParser сразу в DXLImporter.

Вот так:
<!--shcode--><pre><code class=vb>Dim DXLExporter As NotesDXLExporter
Set DXLExporter = Sess.CreateDXLExporter
Call DXLExporter.SetInput(Doc)

Dim DOMParser As NotesDOMParser
Set DOMParser = Sess.CreateDOMParser
Call DOMParser.SetInput(DXLExporter)
On Event PostDOMParse From DOMParser Call <DOM_PROCEDURE>

Dim DXLImporter As NotesDXLImporter
Set DXLImporter = Sess.CreateDXLImporter
Call DXLImporter.SetInput(DOMParser)
Call DXLImporter.SetOutput(Db)

Call DXLExporter.Process[/CODE]

P.S. Мне начинает нравиться новый движок форума.
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
12.11.2009, 14:38 3
так... давай немного подробней...
тут On Event PostDOMParse From DOMParser Call <DOM_PROCEDURE> я должен сделать вызов своей процедуры?
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 14:45 4
В <DOM_PROCEDURE> пишется процедура которая модифицирует XML, когда XML оказывается в DOMParserе
Примерно так:
<!--shcode--><pre><code class=vb>Private Sub DOM_PROCEDURE(Source As NotesDOMParser)
On Error Goto Errh

Dim RootDoc As NotesDOMDocumentNode
Set RootDoc = Source.Document

тут идёт обработка

Source.Serialize

Exit Sub
Errh:
Call ErrHandler
Exit Sub
End Sub[/CODE]
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
12.11.2009, 14:57 5
Тяжело быть бестолковым
Я тебя еще немного по достаю больше некого

Т.е. мой код должен выглядеть так?
<!--shcode--><pre><code class=vb> Call Me.Exporter.Setinput( doc )

Set Me.domParser = Me.session.CreateDOMParser()
Call Me.domParser.Setinput( Me.Exporter )
On Event PostDOMParse From Me.domParser Call DOM_PROCEDURE

Call Me.Importer.Setinput( Me.domParser )
Call Me.Importer.SetOutput( Me.curDb )

Call Me.Exporter.Process()[/CODE]

DOM_PROCEDURE - процедура по твоему примеру...

в итоге ошибка на строке Call Me.Exporter.Process()

Код
<?xml version=1.0?><DXLImporterLog><fatalerror source=NotesInputSource line=1 column=1>Invalid document structure</fatalerror><fatalerror source=NotesInputSource line=1 column=1>The main XML document cannot be empty</fatalerror><err...
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 15:05 6
Цитата Сообщение от NickProstoNick
Т.е. мой код должен выглядеть так?
Да вполне.

Думаю проблема в том, что ты в DOMProcudure забыл сериализнуть Source.
Давай для начала без модификаций, а просто напиши такую процедурку:
<!--shcode--><pre><code class=vb>Private Sub DOM_PROCEDURE(Source As NotesDOMParser)
Source.Serialize
End Sub[/CODE]

И всё, больше ничего.
Тогда по идее, документ должне пройти по кругу DXLExp - DOMPars - DXLImp и вернутся в базу в том же самом виде.

А потом уже посмотрим в сторону модификаций XML на лету.
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
12.11.2009, 15:09 7
Угу... ошибка та же
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 15:17 8
А что ты экпортируешь?
Простой документ?
Так не должно быть.
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
12.11.2009, 15:21 9
Так... выловил ошибку.

В общем прикол в чем... вынес процедуру экспорта и процедуру DOM_PROCEDURE из класса - все работает :(
а в классе не хочет :(

Получилось и в классе. Вот только
пришлось вместо On Event PostDOMParse From Me.domParser Call DOM_PROCEDURE написать On Event PostDOMParse From domParser Call DOM_PROCEDURE

Загвостка была в Ме.
Тогда собственно вопрос.... как правильно?
domParser у меня Privat

блин... рано радовался :(
Событие возникает.. но все равно ошибка есть... :(
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 15:33 10
Если честно, я по классу не подскажу в такой связке.
Я, по большому счёту, классы вообще не очень люблю.
Хотя, конечно, использую/пишу иногда.

Но в связке класс + DOMParser не подскажу, почему так.

Если есть вопросы по модификации, тут можем поговорить :(
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
12.11.2009, 15:51 11
По модификации... давай... Я из хелпа по парсеру взял пример обхода дерева....
Думаю он подойдет
Мне надо искать определенные сочетания слов и заменять их xml-кодом хотспота
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 15:56 12
Насколько я помню, задача была что-то вроде в таблице заменить теги на хотспоты.
Ща гляну, что там було!
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
12.11.2009, 16:01 13
Цитата Сообщение от Omh
Насколько я помню, задача была что-то вроде в таблице заменить теги на хотспоты.
Ща гляну, что там було!
Именно именно
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 16:06 14
Глянул на вскидку:
Я бы делал примерно так:
скорее всего взял бы все параграфы по
<!--shcode--><pre><code class=vb>Set NodesList = RootDoc.GetElementsByTagName("par")[/CODE]

Потом иду по этим параграфам
<!--shcode--><pre><code class=vb>If NodesList.NumberOfEntries > 0 Then
Dim Node As NotesDOMElementNode

Dim i As Integer
For i = 1 To NodesList.NumberOfEntries
Set Node = NodesList.GetItem(i)
If Not Node.IsNull Then
обработка тут
end if
Next[/CODE]
и проверяю находится ли он в ячейке (<!--shcode--><pre><code class=vb>Node.ParentNode.NodeName = "tablecell"[/CODE])
и есть ли в ней таг, который надо заменять (<!--shcode--><pre><code class=vb>Instr(Node.FirstChild.NodeValue, "TAG") <> 0[/CODE])

Если есть, то на его месте строил бы сктрутуру hotspota:
<!--shcode--><pre><code class=xml><doclink document=FAF5C35113AF1081C225761D004283F2 database=C225737800338EDF description=Hole server=ZHOPS/>[/CODE]
А текст бы випиливал.


Как-то так.

Ничё невозможного, но повозится надо.

Вполне возможно, что это не самый оптимальный алгоритм, просто пришёл в голову первым :(
Можно иди по tablecell например :(
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
12.11.2009, 16:10 15
Для меня XML вообще темный лес....как для начала - взял процедуру их хелпа... работает... находит то что надо... меняет... а вот только в документе не отображается :(
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 16:12 16
ну хз
Начни с того, что замени текст тага, на, например текщее время.
Текст тага получить Node.FirstChild.NodeValue если ты на node, которая "par" (как я показывал в примере)
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
12.11.2009, 16:30 17
делаю вот так

Код
        Case DOMNODETYPE_TEXT_NODE:        Plain text node

If node.NodeValue = "TECT" Then
node.NodeValue = "РАБОТАЕТ!"
End If
но вот нет изменений... хотя условие отрабатывает.
Может как-то надо обновлять парсер... или импортер... или хз что :(
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 16:36 18
Вообще Source.Serialize применяет изменения кагбэ...

А тут мне кажется, что текущую Node надо выпилить, а к её паренту приделать новую:
<!--shcode--><pre><code class=vb>Dim TextNode As NotesDOMTextNode
Set TextNode = RootDoc.CreateTextNode(ChdValue)
Call ParentNode.AppendChild(TextNode)[/CODE]

Хотя может можно и просто сменить NodeValue, не уверен
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
12.11.2009, 16:48 19
Нет... все таки бестолковым быть сложно :(
Source.Serialize вызывал не в том месте :(
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.11.2009, 16:57 20
Зороботоло?
0
12.11.2009, 16:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2009, 16:57
Помогаю со студенческими работами здесь

Dxl -> Xml
Существуют ли какие-либо быстрые способы преобразования DXL в стандарный XML (data), понятный...

Символы В Dxl
Например, при экспорте символ {} меняется на {&amp;apos;}. Подскажите, где посмотреть список всех...

Dxl Export формы
Всем привет! Помогите пожалуйста решить следующую проблему: Задача состоит в том, чтобы...

Вопрос По Выгрузке Dxl
Добрый день. Мучаюсь с выгрузкой dxl из lotus`a методом NotesDXLExporter. Подскажите, как выгружать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru