RuleDelayed for parsing XML with multiple children
- To: mathgroup at smc.vnet.net
- Subject: [mg109591] RuleDelayed for parsing XML with multiple children
- From: Zach Bjornson <bjornson at mit.edu>
- Date: Fri, 7 May 2010 06:29:00 -0400 (EDT)
Hi, I'm trying to extract multiple values (same depth, different physical level) from an XML tree using RuleDelayed, but I realized that using RuleDelayed only extracts one of the children. That is: XmlTree follows the form: <LevelA> <LevelB> <Child>value1</Child> </LevelB> <LevelB> <Child>value2</Child> </LevelB> </LevelA> I want those two values. Cases[XmlTree, XMLElement["LevelA",_,{___,XMLElement["LevelB",_,{___,XMLElement["Child",_,{WantThisValue_}],___}],___}]:>{WantThisValue},Infinity] This only gives value1. I can explicitly add more XMLElement tags to get the other value Cases[XmlTree, XMLElement["LevelA",_,{___,XMLElement["LevelB",_,{___,XMLElement["Child",_,{WantThisValue_}],___}],___,XMLElement["LevelB",_,{___,XMLElement["Child",_,{WantThisValueToo_}],___}]:>{WantThisValue,WantThisValueToo},Infinity] but I don't want to use an explicit structure because the number of children/values varies. Any have suggestions for the best alternative method to the RuleDelayed syntax I'm using? Changing the innermost XMLElement tag to simply XMLElement["Child",_,_] gives the proper answer, albeit with the messy flanking tree structure. Dropping indices is not an ideal solution. Thanks! Zach