|
Ошибка при попытке построить DOM по тексту HTML | ☑ | ||
---|---|---|---|---|
0
TormozIT
23.04.23
✎
09:44
|
Выполняю код
ПостроительDOM = Новый ПостроительDOM(); ЧтениеHTML = Новый ЧтениеHTML; ЧтениеHTML.УстановитьСтроку(Текст); ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьDOM = Новый ЗаписьDOM; ЗаписьDOM.Записать(ДокументHTML.Тело, ЗаписьXML); ТекстХМЛ = ЗаписьXML.Закрыть(); ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.УстановитьСтроку(ТекстХМЛ); ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); Получаю ошибку Ошибка разбора XML: - [16,9]
Ошибка: Namespace prefix o on p is not defined Как найти и прописать все нужные соответствия пространств имен? Текст HTML (вырезка): <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=windows-1251"> <meta name=ProgId content=Word.Document> <meta name=Generator content="Microsoft Word 15"> <meta name=Originator content="Microsoft Word 15"> <link rel=File-List href="Запрос%20на%20создание%20клиента%20№14557%20перешел%20в%20новый%20статус%20%20New%20status%20of%20Customer%20request%20add%20№14557%20html.files/filelist.xml"> <link rel=Edit-Time-Data href="Запрос%20на%20создание%20клиента%20№14557%20перешел%20в%20новый%20статус%20%20New%20status%20of%20Customer%20request%20add%20№14557%20html.files/editdata.mso"> </head> <body lang=RU link=blue vlink=purple style='tab-interval:35.4pt'> <div class=WordSection1> <p class=MsoNormal style='margin-left:120.0pt;text-indent:-120.0pt;tab-stops: 120.0pt;mso-layout-grid-align:none;text-autospace:none'><b><span style='font-family:"Calibri",sans-serif;color:black'>От</span></b><b><span lang=EN-US style='font-family:"Calibri",sans-serif;color:black;mso-ansi-language: EN-US'>:<span style='mso-tab-count:1'> </span></span></b><span lang=EN-US style='font-family:"Calibri",sans-serif;color:black;mso-ansi-language: EN-US'>[email protected]<o:p></o:p></span></p> </span></div> </div> </body> </html> Текст XML: <body lang="RU" link="blue" vlink="purple" style="tab-interval:35.4pt"> <div class="WordSection1"> <p class="MsoNormal" style="margin-left:120.0pt;text-indent:-120.0pt;tab-stops: 120.0pt;mso-layout-grid-align:none;text-autospace:none"> <b> <span style="font-family:"Calibri",sans-serif;color:black">От</span> </b> <b> <span lang="EN-US" style="font-family:"Calibri",sans-serif;color:black;mso-ansi-language: EN-US">: <span style="mso-tab-count:1"> </span> </span> </b> <span lang="EN-US" style="font-family:"Calibri",sans-serif;color:black;mso-ansi-language: EN-US">[email protected] <o:p/> </span> </p> </div> </body> |
|||
1
TormozIT
23.04.23
✎
22:12
|
Методом тыка прописал пространства так
ПостроительDOM = Новый ПостроительDOM(); ЧтениеHTML = Новый ЧтениеHTML; ЧтениеHTML.УстановитьСтроку(ТекстХМЛ); ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("html"); Для Каждого Атрибут Из ДокументHTML.ПолучитьЭлементыПоИмени("html")[0].Атрибуты Цикл Если Атрибут.ЛокальноеИмя = "xmlns" Тогда Продолжить; КонецЕсли; ИмяПрост = ирОбщий.ПоследнийФрагментЛкс(Атрибут.ЛокальноеИмя, ":"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен(ИмяПрост, Атрибут.Значение); КонецЦикла; ЗаписьDOM = Новый ЗаписьDOM; ЗаписьDOM.Записать(ДокументHTML.Тело, ЗаписьXML); ЗаписьXML.ЗаписатьКонецЭлемента(); ТекстХМЛ2 = ЗаписьXML.Закрыть(); ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.УстановитьСтроку(ТекстХМЛ2); ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); |
|||
2
TormozIT
23.04.23
✎
22:30
|
Попутно нашел ошибку во всех платформах при вставке текста скопированного из этой темы =)
https://www.hostedredmine.com/issues/962459 |
|||
3
Asmody
24.04.23
✎
09:48
|
(2) ворд навтыкал своих стилей: mso-ansi-language, mso-layout-grid-align и т.д.
И ещё более чем содержательных кусков, типа <o:p></o:p> |
|||
4
Lyekka
24.04.23
✎
10:52
|
Соглашусь с Asmody.
Тут нужно не пространство имен подыскивать, а код чистить от лишних определений, тегов и атрибутов. |
|||
5
TormozIT
24.04.23
✎
14:43
|
Мне нужно было как всегда универсальное решение. И оно было достигнуто в достаточной мере https://www.hostedredmine.com/issues/962306
А "код чистить" - это удел частных случаев. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |