• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

DXL: работа с DOMParser'ом

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Всем привет!
Вопрос.
Вот кусок кода
<!--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]
Ну так вот... документ нормально экспортируется в поток... нормально парсится... но вот импортироваться не хочет.
Лог importer'a
"<?xml version='1.0'?><DXLImporterLog></DXLImporterLog>"

меня смущает вот эта строка Call Me.Importer.Setinput( Me.domParser )
Но вот никак не пойму как надо
 
O

Omh

Не надо стрима.
Передавай 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]
 
Последнее редактирование модератором:

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
так... давай немного подробней...
тут On Event PostDOMParse From DOMParser Call <DOM_PROCEDURE> я должен сделать вызов своей процедуры?
 
O

Omh

В <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]
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Тяжело быть бестолковым :)
Я тебя еще немного по достаю :) больше некого :)

Т.е. мой код должен выглядеть так?
<!--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...
 
O

Omh

Т.е. мой код должен выглядеть так?
Да вполне.

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

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

А потом уже посмотрим в сторону модификаций XML на лету.
 
O

Omh

А что ты экпортируешь?
Простой документ?
Так не должно быть.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Так... выловил ошибку.

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

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

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

блин... рано радовался :(
Событие возникает.. но все равно ошибка есть... :(
 
O

Omh

Если честно, я по классу не подскажу в такой связке.
Я, по большому счёту, классы вообще не очень люблю.
Хотя, конечно, использую/пишу иногда.

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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Нет... все таки бестолковым быть сложно :(
Source.Serialize вызывал не в том месте :(
 
Мы в соцсетях:

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