我需要读取一个XML文件,其中某些节点名称包含句点,这是一个示例:
<build>
<actions>
<hudson.model.ParametersAction>
<safeParameters class="sorted-set"/>
<parameters>
<hudson.model.StringParameterValue>
...
当我尝试使用标准的build.actions.hudson.model.ParametersAction.parameters
时,我得到了
groovy.lang.MissingPropertyException: Exception evaluating property 'hudson' for java.util.concurrent.CopyOnWriteArrayList, Reason: groovy.lang.MissingPropertyException: No such property: hudson for class: hudson.model.ParametersAction
我也试过build.actions.'hudson.model.ParametersAction'.parameters
这个错误:
groovy.lang.MissingPropertyException: Exception evaluating property 'hudson.model.ParametersAction' for java.util.concurrent.CopyOnWriteArrayList, Reason: groovy.lang.MissingPropertyException: No such property: hudson.model.ParametersAction for class: hudson.model.ParametersAction
我怎样才能访问这个属性?
你是对的,有必要用引号包围一个“句号”元素。以下代码适合我。如果它仍然不适合你,那么如果你共享实例化XmlParser
并解析xml的代码片段会更好。
def xml = """
<build>
<actions>
<hudson.model.ParametersAction>
<safeParameters class="sorted-set"/>
<parameters>
<hudson.model.StringParameterValue>foo</hudson.model.StringParameterValue>
</parameters>
</hudson.model.ParametersAction>
</actions>
</build>
"""
def parser = new XmlParser()
def build = parser.parseText(xml)
println(build.actions.'hudson.model.ParametersAction'.parameters.'hudson.model.StringParameterValue'.text())
//prints foo as a result