【问题标题】:Adding A Node To A Nodelist Using XmlParser In Groovy在 Groovy 中使用 XmlParser 将节点添加到节点列表
【发布时间】:2016-08-05 06:22:27
【问题描述】:

当我在 Groovy 中使用 XmlParserNode 添加到 NodeList 时,NodeList 似乎没有反映更改。这是我在 GroovyConsole 中测试的代码。如果您运行此代码,您应该会看到输出“ADD FAILED”,然后是 NodeList 的三个元素的转储。我也用 XmlSlurper 尝试过同样的事情,但是当我读到 XmlSluper 中的 DOM 基本上是不可变的并且只在序列化期间应用更改时切换到 XmlParser。但是使用 XmlParser,这应该工作吗?

def xml = '''
<site id='myCoolSite'>
  <pages/>
  <templates/>
  <properties>
    <property name='good' value='true'/>
    <property name='nice' value='true'/>
    <property name='expensive' value='false'/>
  </properties>
  <stuff/>
</site>  
'''  

site = new XmlParser().parseText( xml )
assert site != null

assert site.properties.property instanceof NodeList
assert site.properties.property.size() == 3

def newNode = new Node(null, "property", [name: "foo", value: "bar"] )

site.properties.property.add( 0, newNode )

def foo = site.properties.property.find { it.@name == "foo" }

if ( foo == null ) {
    println "ADD FAILED. Here are the only properties found: "
    site.properties.property.each { println "${it.@name}=${it.@value}" } 
}
else {
    println "SUCCESS"
}

【问题讨论】:

    标签: xml groovy xmlslurper


    【解决方案1】:

    如果你将它添加到 properties 的子节点而不是 property 节点列表,它会起作用。即改变:

    site.properties.property.add( 0, newNode )
    

    site.properties[0].children().add( 0, newNode )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多