-2

基本的に、このようなコードが一番下にあります。これにより多くのリストが作成されますが、これらすべてのリストをマップに配置することは可能ですか? また、for ループで各インデックスにアクセスするので、マップ内のリストでこれらのインデックスにアクセスすることは可能ですか? 私は、より短いコードを実現し、おそらくより効率的にしようとしています。

//Create our lists
def htmlList = []
def pixProductList = []
def pixLanguageList = []
def pixOffercodeList = []
def pixVIDList = []
def pixStartDateList = []
def pixEndDateList = []
def pixContactList = []
def pixPublisherList = []
def newPixelList = []

//Parse the file
String file = new File('grails-app/controllers/pixel/editor/tool/trackingPixels.xml').text
newPixelList = StringUtils.substringsBetween(file, "<pixelNew", "</pixelNew>")

//Access each element in newPixelList 
for(int i =0; i < newPixelList.size(); i++){
    String newPixel = newPixelList[i]
    htmlList[i] = StringUtils.substringBetween(newPixel, "<html>", "</html>")
    pixProductList[i] = StringUtils.substringBetween(newPixel, "<product>", "</product>")
    pixLanguageList[i] = StringUtils.substringBetween(newPixel, "<lang>", "</lang>")
    pixOffercodeList[i] = StringUtils.substringBetween(newPixel, "<offercode>", "</offercode>")
    pixVIDList[i] = StringUtils.substringBetween(newPixel, "<vid>", "</vid>")
    pixStartDateList[i] = StringUtils.substringBetween(newPixel, "<startDate>", "</startDate>")
    pixEndDateList[i] = StringUtils.substringBetween(newPixel, "<endDate>", "</endDate>")
    pixContactList[i] = StringUtils.substringBetween(newPixel, "<contact>", "</contact>")
    pixPublisherList[i] = StringUtils.substringBetween(newPixel, "<publisher>", "</publisher>")
    }
4

1 に答える 1

2

まず、実際に XML スラーパーを使用して、この文字列操作の代わりにそれを使用できます。

def htmlList = []
def pixProductList = []
def pixLanguageList = []
def pixOffercodeList = []
def pixVIDList = []
def pixStartDateList = []
def pixEndDateList = []
def pixContactList = []
def pixPublisherList = []
def newPixelList = []

File file = new File('grails-app/controllers/pixel/editor/tool/trackingPixels.xml')
def xmlFile = new XmlSlurper().parse(file)
def records = xmlFile.pixelNew //Assuming pixelNew is the top level node

records.each {
    htmlList.add(it.html.text())
    pixProductList.add(it.product.text())
    ...
}

次に、このデータを格納するクラスを作成し、コンストラクターにデータを入力することができます

class WhateverYouWant {
  String html
  String product
  ...

  public WhateverYouWant(NodeChild record) {
      this.html = record.html.text()
      this.product = record.product.text()
      ...
  }
}

次に、次のように簡単に実行できます。

List<WhateverYouWant> items = []

xmlFile = new XmlSlurper().parse(file)
def records = xmlFile.pixelNew //Assuming pixelNew is the top level node

records.each {
    items.add(new WhateverYouWant(it))
}
于 2013-07-26T20:09:12.607 に答える