Работа с DOM

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Работа с DOM

Сообщение sign » 27.03.2010 09:30:56

Не могу преодолеть.
Код: Выделить всё
var Node: TDOMNode;
     Doc:  TXMLDocument; 
begin
...
    ReadXMLFile(Doc, S);
    Node := Doc.DocumentElement.FirstChild;  //
    while Assigned(Node) do begin
      case CaseNodeName of     
        0: begin // DocFields
                 Result.FData.BranchBetween := StrToInt(Node.Attributes.GetNamedItem(nuBranchBetween).NodeValue);
                 Result.FData.Fields.Left   := StrToInt(Node.Attributes.GetNamedItem(nuLeft).NodeValue);
                 Result.FData.Fields.Top    := StrToInt(Node.Attributes.GetNamedItem(nuTop).NodeValue);
                 Result.FData.Fields.Right  := StrToInt(Node.Attributes.GetNamedItem(nuRight).NodeValue);
                 Result.FData.Fields.Bottom := StrToInt(Node.Attributes.GetNamedItem(nuBottom).NodeValue);
               end;
        1: Result.FData.Comment  := AnsiToUtf8(Node.FirstChild.NodeValue);   
...
      end;
        Node := Node.NextSibling;
    end;                         
...
end;

Ошибка возникает на строке Result.FData.Comment := AnsiToUtf8(Node.FirstChild.NodeValue);
Если в файле есть значение, типа <Comment>пример</Comment>, то читается без ошибок, а если нет - <Comment></Comment>, то вылетает ошибка: "Проект *** вызвал класс исключения 'External: SIGSEGV'

Как с этим бороться?
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Работа с DOM

Сообщение Odyssey » 27.03.2010 11:56:58

Код: Выделить всё
Result.FData.Comment := AnsiToUtf8(Node.TextContent);

Или как вариант:
Код: Выделить всё
// if Node.FirstChild <> nil then
if Assigned(Node.FirstChild) then
  Result.FData.Comment := AnsiToUtf8(Node.FirstChild.NodeValue)
else
  Result.FData.Comment := '';

Если пользоваться вторым способом, можно сделать что-то типа:
Код: Выделить всё
function GetNodeText(ANode: TDOMNode): string;

и уже там делать указанную проверку.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Работа с DOM

Сообщение sign » 27.03.2010 12:57:20

Отлично!
Спасибо за подсказку, второй вариант точно в яблочко!
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Работа с DOM

Сообщение dangreen58 » 02.05.2011 15:23:37

как в Lazarus через DOM выводить кириллицу UTF-8 кодировки
выводит "?"
dangreen58
незнакомец
 
Сообщения: 3
Зарегистрирован: 29.03.2011 14:36:10

Re: Работа с DOM

Сообщение Odyssey » 02.05.2011 21:03:26

Код: Выделить всё
Label1.Caption := Utf8Encode(Node1.TextContent);
Node2.TextContent := Utf8Decode(Edit1.Text);
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53

Рейтинг@Mail.ru