// find all trade IDs by party herf id private ListMultimap <string, StandardId> parseAllTradeIds(XmlElement tradeHeaderEl) { // look through each partyTradeIdentifier ListMultimap <string, StandardId> allIds = ArrayListMultimap.create(); IList <XmlElement> partyTradeIdentifierEls = tradeHeaderEl.getChildren("partyTradeIdentifier"); foreach (XmlElement partyTradeIdentifierEl in partyTradeIdentifierEls) { Optional <XmlElement> partyRefOptEl = partyTradeIdentifierEl.findChild("partyReference"); if (partyRefOptEl.Present && partyRefOptEl.get().findAttribute(HREF).Present) { string partyHref = partyRefOptEl.get().findAttribute(HREF).get(); // try to find a tradeId, either in versionedTradeId or as a direct child Optional <XmlElement> vtradeIdOptEl = partyTradeIdentifierEl.findChild("versionedTradeId"); Optional <XmlElement> tradeIdOptEl = vtradeIdOptEl.map(vt => vt.getChild("tradeId")).orElse(partyTradeIdentifierEl.findChild("tradeId")); if (tradeIdOptEl.Present && tradeIdOptEl.get().findAttribute("tradeIdScheme").Present) { XmlElement tradeIdEl = tradeIdOptEl.get(); string scheme = tradeIdEl.getAttribute("tradeIdScheme"); // ignore if there is an empty scheme or value if (scheme.Length > 0 && tradeIdEl.Content.Length > 0) { allIds.put(partyHref, StandardId.of(StandardId.encodeScheme(scheme), tradeIdEl.Content)); } } } } return(allIds); }