[英]How do I fetch the particular tag value that is present multiple times in the XML - Groovy Script?
[英]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.