Hi, I try to parse a file with pyparsing and get this output:
['generic', 'host-01', 'host alias xyz', '10.0.0.1'] - alias: host alias xyz - host_name: ['host-01'] - ip_address: ['10.0.0.1'] - use: ['generic'] <Hosts> <ITEM>generic</ITEM> <host_name>host-01</host_name> <alias>host alias xyz</alias> <ip_address>10.0.0.1</ip_address> </Hosts> ['generic', 'host-01', 'host alias xyz', '10.0.0.1'] finished What I don't understand is why I get the line <ITEM>generic</ITEM> and not <use>generic</use> as there is an associated name in the dump() output. Thank you very much in advance for any clue or help you could provide. The code: --------- #!/usr/bin/env python from pyparsing import * sample = """ define host{ use generic host_name host-01 alias host alias xyz address 10.0.0.1 } """ # define tokens LBRACE,RBRACE = map(Suppress, '{}') ipAddress = Combine(Word(nums) + ('.' + Word(nums))*3) useTemplate = oneOf('generic user') # define grammar deviceName = Word(alphanums+'-') hostDef = Literal('define').suppress() + Literal('host').suppress() useLine = Suppress('use') + useTemplate + Suppress(SkipTo(lineEnd)) host_nameLine = Suppress('host_name') + deviceName + Suppress(SkipTo (lineEnd)) aliasLine = Suppress('alias') + SkipTo(lineEnd) aliasLine.setParseAction(lambda x: ' '.join(x[0].split())) ip_addressLine = Suppress('address') + ipAddress use = useLine.setResultsName('use') host_name = host_nameLine.setResultsName('host_name') alias = aliasLine.setResultsName('alias') ip_address = ip_addressLine.setResultsName('ip_address') host_stmt = (use + host_name + alias + ip_address) host = hostDef + LBRACE + host_stmt + RBRACE test_file = OneOrMore(host) + stringEnd # test x = test_file.parseString(sample) print x.dump() print print x.asXML('Hosts') print print x.asList() print print 'finished' -- http://mail.python.org/mailman/listinfo/python-list