XML - komentarz i odczyt ChildValues

0

D2007 Pro, TXMLDocument.

Google'am i nic :-( Jak wstawić komentarz do pliku XML? Fragment procedurki:

function TCategories.SaveToXML(Stream: TStream): Boolean;
var
  XMLDoc : IXMLDocument;
  CatNodes : IXMLNode;
  I: Integer;
begin
  Result := Stream <> nil;
  if Result then
  begin
    XMLDoc := NewXMLDocument('1.0');
    try
      try
        with XMLDoc do
        begin
          Active := True;
          Options := Options + [doNodeAutoIndent];
          NodeIndentStr := #9;
          Encoding := 'UTF-8';
          with AddChild('Root') do
          begin
            ChildValues['UploadTime'] := Now;
// itd.

Chcę wstawić przed 'Root' komentarz i nie mam pojęcia jak. Ktoś podpowie?

Jak sprawdzić czy dana wartość istnieje? Oczywiście chodzi nadal o XML. Zależy mi na sprawdzeniu kolejnych wartości, ale jeżeli jakiejś nie ma to i tak nalezy sprwadzać inne. "Ubieranie" każdego odczytu w try..except...end to chyba nie najlepszy pomysł. Robię na piechotę tak:

function TTopic.LoadFromXML(TopicNode: IXMLNode): Boolean;
var
  Value: OleVariant;
begin
  Result := Assigned(TopicNode);
  if Result then
    with TopicNode do
    try
      Value := ChildValues['Title'];
      if not VarIsNull(Value) then FTitle := Value;
      Value := ChildValues['Link'];
      if not VarIsNull(Value) then Link := Value;
    except
      Result := False;
    end;
end;

Nie ma tu sprawdzania typów (dla zmiennych innych niż string, ale to teraz nieistotne), i w tym przykładzie są tylko dwa odczyty. Pytanie - jak powinno się czytać "bezpiecznie" wartości (ChildValues) zakładając, że ich trochę jest...?

Pozdrawiam,
Jacek

0

Chciałbym odświeżyć wątek. Również chciałbym znać odpowiedź na pytanie nr. 2. Stosowanie try... except również mi się nie podoba. W tej chwili używam takiego kodu:

  if XML.DocumentElement.ChildNodes[i].ChildValues['color']<>null then
  obj_color:=strtoint(XML.DocumentElement.ChildNodes[i].ChildValues['color'])
  else obj_color:=clBlack;

korzystanie z tryStrToInt nie zadziała bo ChildValues zwraca wartość OLEObject.

1 użytkowników online, w tym zalogowanych: 0, gości: 1