Когда я преобразовываю сообщение с помощью Mulesoft dataweave, я хочу избавиться от всех пространств имен xmlns.
Это мое сообщение:
<?xml version='1.0' encoding='UTF-8'?>
<Entries xmlns = "http://www.example.nl/Entries" type = "Catalog" name = "xxx Catalog" exportDate = "2018-01-18T10:08:27.609Z">
<Entry id = "264063" deleted = "0" creationDate = "2017-05-26T14:26:09.511Z" lastModifiedDate = "2017-10-13T22:46:39.000Z">
<Attributes>
<Attribute>
<MetadataPath>Just an example 1</MetadataPath>
<Locale/>
</Attribute>
<Attribute>
<MetadataPath>Just an example 2</MetadataPath>
<Locale>en_GB</Locale>
</Attribute>
</Attributes>
<Categories>
<Category>
<Hierarchy>GPC_Hierarchy</Hierarchy>
<Id>999999</Id>
</Category>
<Category>
<Hierarchy>GPC_xx_Hierarchy</Hierarchy>
<Id>999998</Id>
</Category>
</Categories>
<Specs>
<Spec>Validatie Spec</Spec>
<Spec>Item Spec</Spec>
</Specs>
</Entry>
</Entries>
Когда я запускаю этот код dataweave:
%dw 2.0
var x = payload.Entries
output application/xml encoding = "utf-8"
---
{
Entry @('type': x.@'type', name: x.@name, exportDate: x.@exportDate, id: x.Entry.@id,
deleted: x.Entry.@deleted, creationDate: x.Entry.@creationDate, lastModifiedDate: x.Entry.@lastModifiedDate )
: {(x.Entry.Attributes ),
(
Categories: (x.Entry.Categories)
),
(
Specs: (x.Entry.Specs)
)
}
}
Тогда это результат
<?xml version='1.0' encoding='UTF-8'?>
<Entry type = "Catalog" name = "xxx Catalog" exportDate = "2018-01-18T10:08:27.609Z" id = "264063" deleted = "0" creationDate = "2017-05-26T14:26:09.511Z" lastModifiedDate = "2017-10-13T22:46:39.000Z">
<Attribute xmlns = "http://www.example.nl/Entries">
<MetadataPath>Just an example 1</MetadataPath>
<Locale/>
</Attribute>
<Attribute xmlns = "http://www.example.nl/Entries">
<MetadataPath>Just an example 2</MetadataPath>
<Locale>en_GB</Locale>
</Attribute>
<Categories>
<Category xmlns = "http://www.example.nl/Entries">
<Hierarchy>GPC_Hierarchy</Hierarchy>
<Id>999999</Id>
</Category>
<Category xmlns = "http://www.example.nl/Entries">
<Hierarchy>GPC_xx_Hierarchy</Hierarchy>
<Id>999998</Id>
</Category>
</Categories>
<Specs>
<Spec xmlns = "http://www.example.nl/Entries">Validatie Spec</Spec>
<Spec xmlns = "http://www.example.nl/Entries">Item Spec</Spec>
</Specs>
</Entry>
Как избавиться от всех этих пространств имен xmlns="http://www.example.nl/Entries"?
Конечно, я могу переписать сообщение, но это не входит в мои намерения. Может быть, есть какой-то тег в dataweave, что-то вроде этого?
output application/xml removeAllNamespaces
Спасибо
Вы можете попробовать приведенный ниже код, который соответствует вашим ожиданиям. Для XML нет прямого свойства записи, чтобы удалить все nameSpace.
%dw 2.0
var x = payload.Entries
fun removeALLNameSpacesFromXML(in) =
in mapObject {
'$$' @(($$.@)):
if ($ is Object)
removeALLNameSpacesFromXML($)
else
($)
}
//This is your transormation code ,I have just assigned with some variable to pass as a Function argument of removeALLNameSpacesFromXML function.
var yourPayloadWithXmlns = {
Entry @('type': x.@'type', name: x.@name, exportDate: x.@exportDate, id: x.Entry.@id, deleted: x.Entry.@deleted, creationDate: x.Entry.@creationDate, lastModifiedDate: x.Entry.@lastModifiedDate): {
(x.Entry.Attributes),
(
Categories: (x.Entry.Categories)
),
(
Specs: (x.Entry.Specs)
)
}
}
output application/xml
---
removeALLNameSpacesFromXML(yourPayloadWithXmlns)
Пример вывода:
<?xml version='1.0' encoding='UTF-8'?>
<Entry type = "Catalog" name = "xxx Catalog" exportDate = "2018-01-18T10:08:27.609Z" id = "264063" deleted = "0" creationDate = "2017-05-26T14:26:09.511Z" lastModifiedDate = "2017-10-13T22:46:39.000Z">
<Attribute>
<MetadataPath>Just an example 1</MetadataPath>
<Locale/>
</Attribute>
<Attribute>
<MetadataPath>Just an example 2</MetadataPath>
<Locale>en_GB</Locale>
</Attribute>
<Categories>
<Category>
<Hierarchy>GPC_Hierarchy</Hierarchy>
<Id>999999</Id>
</Category>
<Category>
<Hierarchy>GPC_xx_Hierarchy</Hierarchy>
<Id>999998</Id>
</Category>
</Categories>
<Specs>
<Spec>Validatie Spec</Spec>
<Spec>Item Spec</Spec>
</Specs>
</Entry>
Привет, Маниш, спасибо за ответ. Жаль, что нет свойства записи XML, но ваше решение справляется со своей задачей.