How can I retrieve an element from Groovy's GPathResult using a string that contains a perioid

后端 未结 2 1090
感动是毒
感动是毒 2020-12-04 03:31
def elementPath = \"elementA.elementB\"
xml.\"${elementPath}\".each {}

How to make this work? xml.elementA.elementB.each {} works.

相关标签:
2条回答
  • 2020-12-04 03:45
    xml."elementA.elementB".each {}
    
    0 讨论(0)
  • 2020-12-04 03:59

    I can think of 2 ways round this...

    // Dummy Data for the testing
    def CAR_RECORDS = '''
        <records>
          <car name='HSV Maloo' make='Holden' year='2006'>
            <country>Australia</country>
            <record type='speed'>Production Pickup Truck with speed of 271kph</record>
          </car>
          <car name='P50' make='Peel' year='1962'>
            <country>Isle of Man</country>
            <record type='size'>Smallest Street-Legal Car at 99cm wide and 59 kg in weight</record>
          </car>
          <car name='Royale' make='Bugatti' year='1931'>
            <country>France</country>
            <record type='price'>Most Valuable Car at $15 million</record>
          </car>
        </records>
      '''
    def xml = new XmlSlurper().parseText( CAR_RECORDS )
    def propNames = 'car.country'
    
    // METHOD 1
    // Split the propnames into individual properties, then use Inject to walk down this list
    // Passing the result to the next property
    propNames.split( /\./ ).inject( xml ) { obj, prop -> obj?."$prop" }.each { println it.text() }
    
    // METHOD 2
    // Construct a string to evaluate, and pass the xml object to it (it gets substituted in place of x)
    Eval.x( xml, "x.${propNames}" ).each { println it.text() }
    

    The javadoc page for Eval.x is here

    Hope this helps :-)

    0 讨论(0)
提交回复
热议问题