Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
Да в хелп я и сам влез. Если бы всё было понятно, то и тему бы не заводил . Перелопатил все (ну или почти все) Example, но примеров преобразования dxl так и не нашел, а одной теорией сыт не будешь.а говорили - не отсылать к хэлпу
Недавно делал такую штуку: есть док, к нему до десятка ответных доков (табличная часть). Для рисования печатной формы в цикле перебирал ответные доки, делал им dxl-экспорт, накладывал xslt и получал в итоге строки <tr>...</tr>. Затем вставлял эти строки между <table> и </table>, результат в скрытое cfd-поле "TableBody", под ним вычисляемый текст с формулой "TableBody".Да в хелп я и сам влез. Если бы всё было понятно, то и тему бы не заводил . Перелопатил все (ну или почти все) Example, но примеров преобразования dxl так и не нашел, а одной теорией сыт не будешь.
Ну а в XSLT не влазил, будучи увереным в том, что это чисто вэбовская штука, аналогичная css - похоже я ошибался...
<?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 >
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 может быть достаточно велик)
Да не суть, тем более значение Z может быть только в element2. Плюс, я не нашел в SAX'е аналогов DOM'овского NodeValue, вернее, как я понял, вытянуть значение элемента можно только через Characters.Вы берете значение Z в любом месте, а не в теге element2
В обработчики SAX-парсера можно добавить проверку каких-нибудь дополнительных условий и бросать исключение, потом глядеть в логе, что случилось.А после того, как я запускаю NotesSAXParser.Process он будет колбасить xml пока не наступит SAX_EndDocument или можно остановить процесс раньше?
Чтобы понять суть.
Говорю же, с импортом/экспортом вроде разобрался, теперь пытаюсь разобраться с NotesDOMParser, но пока мне поддалось лишь получить/проверить ноды да их атрибуты, а вот тайное знание как преобразовать dxl (частный случай - подменить значение элемента), да еще и налету, пока мне не поддается...
В справке дизайнера ключевые слова NotesNoteCollection, DXLгде можно раздуплиться насчет импорта/экспорта базы в xml
Обучение наступательной кибербезопасности в игровой форме. Начать игру!