Я не пользователь TXMLParser, но быстрый переход к разделу документации и странице часто задаваемых вопросов показывает проблему.
Проблема с необъявленными идентификаторами не из-за переменных, которые вы объявили в разделе vars; он находится в цикле справа от присваивания (см. строки, заканчивающиеся на "// ****" комментарии:
VAR
Parser : TXmlParser;
rule, alert: string;
i:integer;
BEGIN
Parser := TXmlParser.Create;
Parser.Normalize := TRUE;
Parser.LoadFromFile ('c:\parser.xml');
Parser.StartScan;
WHILE Parser.Scan DO
CASE Parser.CurPartType OF
ptStartTag,
ptEmptyTag :
For i:=0 TO Parser.CurAttr.Count-1 Do
Begin
rule := Parser.CurAttr.rule (i); // **** problem here with .rule
alert :=Parser.CurAttr.alert (i); // **** problem here with .alert
ptContent,
ptCData : // Process Parser.CurContent field here
ptEndTag : // Process End-Tag here (Parser.CurName)
ptPI : // Process PI here
// (Parser.CurName is the target, Parser.CurContent)
END;
Parser.Free;
end;
Ничто не установило .rule () или .alert как методы Parser.CurAttr, и вы не можете рассматривать их как таковые. Попробуйте вместо этого:
rule := Parser.CurrAttr.Value('rule');
alert := Parser.CurrAttr.Value('alert');
На самом деле, теперь, когда я больше смотрю на опубликованный вами XML, вы вообще не имеете дело с атрибутами, а с контентом. Атрибуты будут иметь вид:
<rule name="My rule" priority="3" alert="Very important">Other stuff</rule>
Тем не менее, я оставлю этот пост только потому, что он объясняет синтаксическую ошибку, которую вы имели в отношении необъявленных идентификаторов.