如何使用groovy.util.XmlParser访问包含句点的XML节点

时间:2019-03-15 18:38:46

标签: groovy xml-parsing

我需要读取一个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

如何访问此属性?

1 个答案:

答案 0 :(得分:1)

您是对的,有必要用引号将“句号”元素引起来。下面的代码对我有用。如果仍然无法解决问题,那么最好共享实例化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