繁体   English   中英

Groovy:如何检查 xml 中的多个标签值?

[英]Groovy: How to check multiple tag value in xml?

我有这样的xml内容:

<?xml version="1.0" encoding="UTF-8"?><service>
  <rs>
    <Id>
      <details>
        <start>2017-10-07</start>
        <startDate>2017-02-02</startDate>
        <endDate>2017-03-02</endDate>
        <runAs>false</runAs>
        <makeVersion>1</makeVersion>
        <patch>this is  patch</patch>
        <parameter>1</parameter>
      </details>
    </Id>
    <person>
      <details>
        <start>2017-09-07</start>
        <startDate>2017-02-02</startDate>
        <endDate>2017-03-02</endDate>
        <runAs>true</runAs>
        <makeVersion>1</makeVersion>
        <patch>this is  patch</patch>
        <parameter>1</parameter>
      </details>
    </person>
  </rs>
  <country>
  <details>
        <start>2017-09-07</start>
        <startDate>2017-02-02</startDate>
        <endDate>2017-03-02</endDate>
        <runAs>true</runAs>
        <makeVersion>1</makeVersion>
        <patch>this is  patch</patch>
        <parameter>1</parameter>
      </details>
  </country>
</service>

我想检查每个开始标记值,然后更新 runAs 的值,我试过这个:

  def xml = new XmlParser().parseText(content)
            def start=xml.'**'.details.start[0].text();
            def  run=xml.'**'.details.start[0].text();
            if(start!=currentDate &&  run!='false'){

                xml.'**'.details.runAs[0].value="false";
            }
           else {
                xml.'**'.details.find({p->

                    p.start[0].value= subtractDays(p.start[0].text(),p.parameter[0].text()).toString()
                    p.runAs[0].value='false';
                })


            }
            def newxml=XmlUtil.serialize(xml)

但是它只更新了 rs->Id->details->runAs 值,我应该更改什么来更新每个runAs标记值,并且在某些情况下也更新每个开始标记值?

您可以使用以下代码将runAs元素值更改为false

//Pass xml as string to parseText method
def xml = new XmlSlurper().parseText(xmlString)
//Find runAs element and change value to false
xml.'**'.findAll{it.name() == 'runAs'}.collect{it.replaceBody false}
println groovy.xml.XmlUtil.serialize(xml)

您可以快速试用在线演示

同样,您也可以通过在findAll闭包中提供条件来更改start元素值的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM