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

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

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

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

DXL: общая тема

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
меняете, сериализуете...
а говорили - не отсылать к хэлпу :)
"Using XML with LotusScript "
да и XMLTransform делает именно нужное, без влезания в код... (зачем хардкодить, ежели можно трансформациями)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216

 
A

alik86

а говорили - не отсылать к хэлпу ;)
Да в хелп я и сам влез. Если бы всё было понятно, то и тему бы не заводил ;). Перелопатил все (ну или почти все) Example, но примеров преобразования dxl так и не нашел, а одной теорией сыт не будешь.
Ну а в XSLT не влазил, будучи увереным в том, что это чисто вэбовская штука, аналогичная css - похоже я ошибался... :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
вот говорил же - домина здесь "сбоку"..., основное - технологии XML и их реализации и инструменты
 
N

nvyush

Да в хелп я и сам влез. Если бы всё было понятно, то и тему бы не заводил ;). Перелопатил все (ну или почти все) Example, но примеров преобразования dxl так и не нашел, а одной теорией сыт не будешь.
Ну а в XSLT не влазил, будучи увереным в том, что это чисто вэбовская штука, аналогичная css - похоже я ошибался... ;)
Недавно делал такую штуку: есть док, к нему до десятка ответных доков (табличная часть). Для рисования печатной формы в цикле перебирал ответные доки, делал им dxl-экспорт, накладывал xslt и получал в итоге строки <tr>...</tr>. Затем вставлял эти строки между <table> и </table>, результат в скрытое cfd-поле "TableBody", под ним вычисляемый текст с формулой "TableBody".
Добавлено Кстати, css и в клиенте можно/нужно использовать.
 
A

alik86

NotesSAXParser class
Имеется документ xml следующего вида:
Код:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- File Name: XmlDoc.xml -->
<document>
<element1 attr1="x1" attr2="y1" attr3 = "z1">
< element2>значение 1 </ element2>
</ element1>
‘………………………………………………
<element1 attr1="xZ" attr2="yZ" attr3 = "zZ">
< element2>значение Z </ element2>
</ element1>
‘………………………………………………
<element1 attr1="xN" attr2="yN" attr3 = "zN">
< element2>значение N </ element2>
</ element1>
</ document >
Надо найти element2 со значением Z и взять значение атрибута attr2 элемента element1 который содержит найденный element2.
При помощи NotesDOMParser задача решается на раз.
Теперь решил я попробовать для этих целей пока чуждый мне NotesSAXParser. Получил следующее решение:
Код:
Option Public
Dim OHO As Boolean
Dim Attr2 As String
Sub Initialize
Dim Session As New NotesSession
Dim Db As NotesDatabase
Dim Doc As NotesDocument
Dim StreamInput As NotesStream
Dim SAXParser As NotesSAXParser
Set Db = Session.CurrentDatabase
filepath="D:\XmlDoc.xml"
Set StreamInput = Session.CreateStream
If Not StreamInput.Open(filepath, "UTF-8") Then
Print "Невозможно открыть " & filename, ,"Ошибка"
Exit Sub
End If
Set SAXParser=Session.CreateSAXParser(StreamInput)
On Event SAX_Characters From saxParser Call SAXCharacters
On Event SAX_StartElement From saxParser Call SAXStartElement
OHO = False
SAXParser.Process		 
End Sub

Sub SAXCharacters (Source As Notessaxparser, Byval Characters As String, Count As Long)
If Characters = "значение Z " Then
OHO = True
End If
End Sub

Sub SAXStartElement (Source As Notessaxparser, Byval ElementName As String, Attributes As NotesSaxAttributeList)
If OHO Then
Msgbox "Attr2 = " + Attr2, , “Мама, у меня получилось!!!”
OHO = False
Exit Sub
End If
If ElementName = "element1" Then
Attr2 = Attributes.GetValue(2)		
End If	
End Sub
Пару вопросов для знающих да предполагающих:
1. Как решение? (мне вот как серпом по яйцам использование глобальных переменных)
2. Можно ли как-то принципиально по-другому решить задачу с помощью NotesSAXParser’а?
3. Есть ли вообще смысл тут использовать NotesSAXParser? (документ xml может быть достаточно велик)
 
D

divankin

1. Как решение? (мне вот как серпом по яйцам использование глобальных переменных)
2. Можно ли как-то принципиально по-другому решить задачу с помощью NotesSAXParser’а?
3. Есть ли вообще смысл тут использовать NotesSAXParser? (документ xml может быть достаточно велик)

1. Заведите класс и засуньте в него все глобальные переменные. Таким образом у вас будет всего одна глобальная переменная.
2. Только с помощью DOM :)
3. Собственно, в этом и разница между DOM и SAX. SAX менее удобен, зато требует меньше ресурсов и скорость обработки практически линейно зависит от размера XML. DOM более удобен для разработчика, но требует загрузки и парсинга целиком XML. Поскольку вы не сказали никакой оценки размера xml, то и мы вам не скажем имеет ли смысл 'тут' использовать SAX

Только вы неточно решили задачу. Вы берете значение Z в любом месте, а не в теге element2. Это может потом аукнуться.
 
A

alik86

Divankin, про эту разницу между DOM и SAX мне известно (поэтому я и уточнил что документ xml может быть достаточно велик) :)
В документе около 1-1.5 тыс элементов <element1>, в каждом элементе <element1> порядка 10 атрибутов.
Вы берете значение Z в любом месте, а не в теге element2
Да не суть, тем более значение Z может быть только в element2. Плюс, я не нашел в SAX'е аналогов DOM'овского NodeValue, вернее, как я понял, вытянуть значение элемента можно только через Characters.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
создать класс..., кот. будет обрабатывать, и у него метод, кот. оперирует с нужными переменными (уже не глобальными для приложения)
ООП аднака :)
да..., SAX проходит последовательно (как по потоку)
 
N

nvyush

alik86
Оптимизация ради оптимизации никому не нужна. Если Ваш код с dom-парсером будет обрабатывать документ за 0,1 с, а с sax-парсером — за 0,01 c, то пользователь разницы не заметит, хоть второй и работает в 10 раз быстрее. "Танцы с бубном" нужны только тогда, когда натыкаешься на реальный тормоз. Заказчику важна не внутренняя реализация программы, а как можно быстрее получить работающий без глюков продукт.
 
A

alik86

Ясно. От глобальных переменных избавимся.
Но сам алгоритм решения через SAX может быть только такой как у меня (т.е. принципиально по-другому решить задачу с помощью NotesSAXParser’а нельзя) -- всё равно прийдется обмениваться инфой между процедурами, вызываемыми по событиям SAX_Characters и SAX_StartElement? (Правильно ли я вытягиваю значение элемента <element2> -- на событии SAX_Characters (или можно по другому)?)
nvy
Тут нет оптимизация ради оптимизации, просто выдалась свободная минутка и я решил заняться самообразованием ради самообразования. :)
P.S. Я добью этот xml!!!
 
A

alik86

А после того, как я запускаю NotesSAXParser.Process он будет колбасить xml пока не наступит SAX_EndDocument или можно остановить процесс раньше?
 
N

nvyush

А после того, как я запускаю NotesSAXParser.Process он будет колбасить xml пока не наступит SAX_EndDocument или можно остановить процесс раньше?
В обработчики SAX-парсера можно добавить проверку каких-нибудь дополнительных условий и бросать исключение, потом глядеть в логе, что случилось.
 
S

SimpleSign

Чтобы понять суть.
Говорю же, с импортом/экспортом вроде разобрался, теперь пытаюсь разобраться с NotesDOMParser, но пока мне поддалось лишь получить/проверить ноды да их атрибуты, а вот тайное знание как преобразовать dxl (частный случай - подменить значение элемента), да еще и налету, пока мне не поддается... :)

Уважаемый alik86, подскажи где можно раздуплиться насчет импорта/экспорта базы в xml. Кучу инфы перелопатил нигде не могу найти (((
 
A

alik86

Я бы даже сказал NotesDXLExporter class и NotesDXLImporter class Вам в помощь (опять же в хелпе неплохие Example'сы имеются).
Я прошёл следующий путь в изучени DXL:
Сначала почитал литературу по XML (ее и на русском полно), понял в чём суть, далее дизайнерский хелп - раздел XML for Domino, параллельно пробуя применить почерпнутое в буквах на практике ну и, естественно, на всём пути приставая с вопросами к форумчанам.
P.S. Перечитайте данную тему, поставте себя на моё место и чётко следуйте почти всем советам, даваемым мне -- мне помогло... :)
 
Мы в соцсетях:

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