Я очень новичок в xquery, и у меня есть проблема, которую я не могу решить.
Я хочу повторить xml и сохранить некоторые записи на карте. Так что я могу объединить одни и те же ключи с разными значениями (StringValue1, StringValue2). В конце я хочу вернуть полную карту и сохранить ее в файл. После вы найдете мой код. И я использовал xbase для выполнения этих xquerys.
CODE
declare namespace functx = "http://www.functx.com";
(: Function should merge the values, if the map contains the key, else it should put the new entrie to the map.:)
declare function functx:pnMap($map as map(*), $key as xs:anyAtomicType, $value as item()*) as map(*) {
if(map:contains($map, $key)) then (map:merge(($map, map{$key:$value}), map{"duplicates":"combine"})) else map:merge((map{ $key: $value }, $map))
} ;
let $pnMap := map{}
for $x in doc('file:///D:/Software/BaseX932/basex/input/MyXML.xml')/PFA/Records/Entity
return functx:pnMap($pnMap, substring-before((substring-after(data($x/BigUnsortedStringField), 'Owner: ')), '
'), string-join(('Position=Owner | ', 'EntityID=', data($x/@id),' | ', 'SomeOtherNo=', data($x/IDNumberTypes/ID[@IDType="StringWhereIfindsomeOtherNumber"])), ''))
РЕЗУЛЬТАТ
map {
"Nick": "Position=Owner | EntityID=625115 | SomeOtherNo=7206512"
}
map {
"James": "Position=Owner | EntityID=1016624 | SomeOtherNo=9138056"
}
map {
"Nick": "Position=Owner | EntityID=1016625 | SomeOtherNo=9051648"
}
map {
"Pete": "Position=Owner | EntityID=1016626 | SomeOtherNo=9051636"
}
map {
"Jon": "Position=Owner | EntityID=1016675 | SomeOtherNo=9349667"
}
Ожидаемый результат 1
map {
"Nick": "Position=Owner | EntityID=625115 | SomeOtherNo=7206512, Position=Owner | EntityID=1016625 | SomeOtherNo=9051648"
"James": "Position=Owner | EntityID=1016624 | SomeOtherNo=9138056"
"Pete": "Position=Owner | EntityID=1016626 | SomeOtherNo=9051636"
"Jon": "Position=Owner | EntityID=1016675 | SomeOtherNo=9349667"
}
This является сокращенным отрывком из XML:
<Entity id="1016626">
<Status>Active</Status>
<IDNumberTypes>
<ID IDType="SomeOtherNo">
<IDValue>9051636</IDValue>
</ID>
</IDNumberTypes>
<BigUnsortedStringField>Some text
Owner: Pete
Sister: Magrit
Next Line text
more text
</BigUnsortedStringField>
</Entity>
<Entity>
....
</Entity>