0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
|
|
1 | |
Dxl Importer12.11.2009, 11:06. Показов 87322. Ответов 69
Метки нет (Все метки)
Всем привет!
Вопрос. Вот кусок кода <!--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
|
12.11.2009, 11:06 | |
Ответы с готовыми решениями:
69
Баг в Importer.importdxl Dxl R8 To R6 Dxl Переобразование Dxl |
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 | |
12.11.2009, 16:57 | |
Помогаю со студенческими работами здесь
20
Dxl -> Xml Символы В Dxl Dxl Export формы Вопрос По Выгрузке Dxl Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |