On Jul 1, 8:02 am, name <[EMAIL PROTECTED]> wrote: > 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'
Looks like this is a bug in asXML(). Note that if I reverse the use and host_name strings in the input and in your grammar, I get this XML output: <Hosts> <ITEM>host-01</ITEM> <use>generic</use> <alias>host alias xyz</alias> <ip_address>10.0.0.1</ip_address> </Hosts> Fortunately, you have provided a nice short test case, which should allow me to track down the problem. Thanks, -- Paul -- http://mail.python.org/mailman/listinfo/python-list