1

xml ファイルからデータを読み取って値を操作しようとしているサンプル コードがあります。http://ideone.comで試したところ、これは完全にうまくいきました

私の実際のコードでは、このようなものを呼び出しています

def xmlFile = "path/to/xmlfile.xml"
def tcproj = new XmlParser().parseText( getTemplate(xmlFile).toString() )

しかしif、サンプル コードで指定した条件を実際のコードで使用すると、まったく異なる結果が得られます。

デバッグしようとすると、結果が大きく異なることがわかりました。私がやろうとしたときのこれを使った私の実際のコードの結果

println records.supported_versions.version.any { println it; it.toString().matches( /$ver/ ) }

これでしたか

version[attributes={}; value=[6.0.35.A]]
version[attributes={}; value=[7.0.25.B]]
false

私がする時

println records.supported_versions.version.toString()

結果が出ます

[version[attributes={}; value=[6.0.35.A]], version[attributes={}; value=[7.0.25.B]]]

ここで何が起こっているのか、そしてこれを解決する方法を誰かが理解するのを手伝ってくれますか?

4

1 に答える 1

0

XmlParserその例の代わりに使用XmlSlurperしています...

XmlParser を使用するには、コードを次のように変更する必要があります。

class xmlWorker {
  static def tcproj = '''<tcs>
                           <supported_versions>
                             <version>6.0.35.A</version>
                             <version>7.0.25.B</version>
                           </supported_versions>
                         </tcs>'''
}
def records = new XmlParser().parseText(xmlWorker.tcproj)

def ver = "6.0.35.A"

println "Version: " + ver

println records.supported_versions.version.any {
  println it.text()
  it.text().matches( /${ver}/ )
}

if( records.supported_versions.version.any { it.text().matches( /${ver}/ ) } ) {
  println "if"
} else {
  println "else"
}
于 2012-04-05T12:22:52.813 に答える