我需要幫助使用 Groovy 腳本替換 XML 節點。每個<document_owner__c><value>9231799</value></document_owner__c>都應替換為<Manager>1234</Manager>. 下面給出了示例輸入和所需的輸出。
輸入:
<?xml version='1.0' encoding='UTF-8'?>
<root>
<row>
<id>728</id>
<document_owner__c>
<value>9231799</value>
</document_owner__c>
</row>
<row>
<id>713</id>
<document_owner__c>
<value>9231799</value>
</document_owner__c>
</row>
<row>
<id>707</id>
<document_owner__c>
<value>9231799</value>
</document_owner__c>
</row>
</root>
所需輸出:
<?xml version='1.0' encoding='UTF-8'?>
<root>
<row>
<id>728</id>
<Manager>1234<Manager>
</row>
<row>
<id>713</id>
<Manager>1234<Manager>
</row>
<row>
<id>707</id>
<Manager>1234<Manager>
</row>
</root>
uj5u.com熱心網友回復:
這是使用 DataWeave 的解決方案。我撰寫了一個引數化函式,它遞回地轉換所需的鍵并將其替換為一個新元素,該元素是 DataWeave 型別中的物件。
%dw 2.0
output application/xml
fun replaceElement(originalObject, key, newObject)=
originalObject match {
case is Object -> originalObject mapObject (if($$ as String == key) newObject else ($$): replaceElement($, key, newObject))
else -> $
}
---
replaceElement(payload, "document_owner__c", {Manager: "1234"})
uj5u.com熱心網友回復:
我們有一份作業 jenkins 作業,做類似的事情。我從中提取了一些代碼并針對您的場景進行了修改。這是 Groovy 腳本:
import groovy.xml.XmlUtil
import groovy.xml.StreamingMarkupBuilder
def oldXml = """
<root>
<row>
<id>728</id>
<document_owner__c>
<value>9231799</value>
</document_owner__c>
</row>
<row>
<id>713</id>
<document_owner__c>
<value>9231799</value>
</document_owner__c>
</row>
<row>
<id>707</id>
<document_owner__c>
<value>9231799</value>
</document_owner__c>
</row>
</root>
"""
def root = new XmlSlurper().parseText(oldXml)
root.row
.findAll {it.document_owner__c.value.text().equals('9231799') }
.document_owner__c
.replaceNode { Manager("1234") }
def newXml = XmlUtil.serialize(new StreamingMarkupBuilder().bind {mkp.yield root})
println newXml
輸出:
<?xml version="1.0" encoding="UTF-8"?><root>
<row>
<id>728</id>
<Manager>1234</Manager>
</row>
<row>
<id>713</id>
<Manager>1234</Manager>
</row>
<row>
<id>707</id>
<Manager>1234</Manager>
</row>
</root>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/354784.html
