【问题标题】:Groovy read values from xmlGroovy 从 xml 读取值
【发布时间】:2012-04-05 12:11:09
【问题描述】:

我有一个Sample Code,我正在尝试从 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]]]

谁能帮我了解这里发生了什么以及如何解决这个问题?

【问题讨论】:

    标签: xml groovy xml-parsing


    【解决方案1】:

    您使用的是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"
    }
    

    【讨论】:

    • 谢谢。我想这回答了我的问题。它不能解决我的问题:(我正在努力找出如何处理if 条件。
    • @latestVersion 您是否解释了问题中的问题?我看不到 :-( 实际问题是什么?
    • @latestVersion 您能否在问题的底部添加一些内容来解释 的含义?“...我正在努力找出如何处理 if 条件。”
    • 哇!!非常感谢。我实际上错过了你所做的。这太棒了。感谢您的解决方案:)
    • @latestVersion 不用担心 :-) 祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多