• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Работа с Notesdomparser Class

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

Azrael

Кто-нибудь встречался со следующей проблемой: NotesDOMParser работает только, если в XML-файле есть только английские символы и вообще нормально работает только, если в заголовке будет <?xml version="1.0"?>, а если уже <?xml version="1.0" encoding="windows-1251"?>, то вываливается ошибка на методе Process или Parse. Такая же ошибка вылазит и в случае, если будут английские буквы, т.е.
Код:
<?xml version="1.0"?>
<ovkdom>
<firm>
<orgname>roga i kopita</orgname>
...
а
Код:
<?xml version="1.0"?>
<ovkdom>
<firm>
<orgname>Рога и копыта</orgname>
...
уже не работает
Из справки...
Код:
(Declarations)
Dim domParser As NotesDOMParser
Dim LF As String
Sub Initialize
Dim session As NotesSession
Dim db As NotesDatabase
Dim inputStream As NotesStream, outputStream As NotesStream
Dim docNode As NotesDOMDocumentNode

Dim origXML As String, outputFile As String
origXML = "c:\dxl\xmldom.xml"
outputFile = "c:\dxl\DOMtree.txt"

Dim header As String
header = "Walk Tree agent"
LF = Chr(13)+Chr(10)

On Error Goto errh

Set session = New NotesSession	
Set db = session.CurrentDatabase

'create the output file
Set outputStream =session.CreateStream
outputStream.Open (outputFile)
outputStream.Truncate

'write report title
outputStream.WriteText ("DOM Parser Report - " )
outputStream.WriteText (header+LF)

'open the XML file
Set inputStream = session.CreateStream
inputStream.Open (origXML)
If inputStream.Bytes = 0 Then
outputStream.WriteText (origXML+" is empty"+LF)
Goto results
End If

'create DOM parser and process
Set domParser=session.CreateDOMParser(inputStream, outputStream)
domParser.Process

'get the document node
Set docNode = domParser.Document

Call walkTree(docNode)

results:
Call outputStream.Close
Exit Sub
errh:
outputStream.WriteText ("errh: "+Cstr(Err)+": "+Error+LF)
Resume results
End Sub
 
Вазродю тему с такой же ситуацией , как и у автора

Если значения набиты кирилицей то не работает САХПарсер.
Если оставить кирилические значения и кодировку 1251,, то ругаеться такой воть ошибкой
err.JPG

Если сменить кодировку на утф-8 - не распознаё кирилические символы

клиент 7.0.2
XML чужой, приходит по почте
 
У меня DOM-парсер клинил при наличии в xml между тэгами символов табуляции, переводов строк, т.е. это "кушал":
Код:
<?xml version='1.0' encoding='windows-1251'?><document><table><tr><td>данные</td></tr></table></document>
а это — нет:
Код:
<?xml version='1.0' encoding='windows-1251'?>
<document>
<table>
<tr>
<td>
данные
</td>
</tr>
</table>
</document>
 
открывать пришедший xml, наверное нужно в той кодировке, в которой он создан, т.е. явно указывать кодировку при открытии файла в поток иначе он откроет в утф8, а после, возможно, нужно будет конвертнуть в unicode то, что в потоке, если парсер не заработает без конвертации..

или что-то подобное.. нужно поиграться кодировками..
 
или что-то подобное.. нужно поиграться кодировками..


угу, так и зделал
Call inputStream.Open (origXML, "ASCII") - и о чудо, читает ... вот толька в кирилице кракозяблы

сума сойти, стоило поставить
Call inputStream.Open (origXML, "Windows-1251") - и всё заработало и читает нормально.

разобрался, чего и всем желаю.
всем спасибо
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab