Я хочу объединить xmls без использования браузера, поэтому в основном я использую библиотеку npm для обработки xslt.
У меня есть два xml-файла, например:
var first = `<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <ExecuteTimeSeriesRequestsResponse xmlns="http://tempuri.org/"> <ExecuteTimeSeriesRequestsResult xmlns:a="http://schemas.datacontract.org/2004/07/.DSWebService.WcfImpl" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:TimeSeriesResponseItem> <a:Instrument>BARC</a:Instrument> <a:InstrumentDisplay>BARCLAYS</a:InstrumentDisplay> <a:DataTypeValues> <a:DataTypeResponseValueBase i:type="a:DataTypeTimeSeriesResponseValue"> <a:DataType /> <a:DataTypeDisplayName i:nil="true" /> <a:Description>BARCLAYS</a:Description> <a:Values xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:anyType i:type="c:double" xmlns:c="http://www.w3.org/2001/XMLSchema">149.34</b:anyType> <b:anyType i:type="c:double" xmlns:c="http://www.w3.org/2001/XMLSchema">149.48</b:anyType> </a:Values> </a:DataTypeResponseValueBase> //MERGE here based on "<a:InstrumentDisplay>" type </a:DataTypeValues> <a:Dates xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:dateTime>2019-05-31T00:00:00</b:dateTime> <b:dateTime>2019-06-03T00:00:00</b:dateTime> </a:Dates> <a:Frequency>D</a:Frequency> </a:TimeSeriesResponseItem> <a:TimeSeriesResponseItem> <a:Instrument>VOD</a:Instrument> <a:InstrumentDisplay>VODAFONE GROUP</a:InstrumentDisplay> <a:DataTypeValues> <a:DataTypeResponseValueBase i:type="a:DataTypeTimeSeriesResponseValue"> <a:DataType /> <a:DataTypeDisplayName i:nil="true" /> <a:Description>VODAFONE GROUP</a:Description> <a:Values xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:anyType i:type="c:double" xmlns:c="http://www.w3.org/2001/XMLSchema">129.42</b:anyType> <b:anyType i:type="c:double" xmlns:c="http://www.w3.org/2001/XMLSchema">129.96</b:anyType> </a:Values> </a:DataTypeResponseValueBase> //MERGE here based on "<a:InstrumentDisplay>" type </a:DataTypeValues> <a:Dates xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:dateTime>2019-05-31T00:00:00</b:dateTime> <b:dateTime>2019-06-03T00:00:00</b:dateTime> </a:Dates> <a:Frequency>D</a:Frequency> </a:TimeSeriesResponseItem> </ExecuteTimeSeriesRequestsResult> </ExecuteTimeSeriesRequestsResponse> </s:Body> </s:Envelope> `; var second = `<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <ExecuteSnapshotRequestsResponse xmlns="http://tempuri.org/"> <ExecuteSnapshotRequestsResult xmlns:a="http://schemas.datacontract.org/2004/07/.DSWebService.WcfImpl" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:SnapshotResponseItemBase i:type="a:SnapshotResponseItem"> <a:Instrument>BARC</a:Instrument> <a:InstrumentDisplay i:nil="true" /> <a:DataTypeValues> <a:DataTypeResponseValueBase i:type="a:DataTypeSnapshotResponseValue"> <a:DataType>DS.NAME</a:DataType> <a:DataTypeDisplayName>DS.NAME</a:DataTypeDisplayName> <a:Value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">BARCLAYS</a:Value> </a:DataTypeResponseValueBase> <a:DataTypeResponseValueBase i:type="a:DataTypeSnapshotResponseValue"> <a:DataType>ISIN</a:DataType> <a:DataTypeDisplayName>ISIN CODE</a:DataTypeDisplayName> <a:Value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">GB0031348658</a:Value> </a:DataTypeResponseValueBase> </a:DataTypeValues> <a:Date>2019-05-31T00:00:00Z</a:Date> </a:SnapshotResponseItemBase> <a:SnapshotResponseItemBase i:type="a:SnapshotResponseItem"> <a:Instrument>VOD</a:Instrument> <a:InstrumentDisplay i:nil="true" /> <a:DataTypeValues> <a:DataTypeResponseValueBase i:type="a:DataTypeSnapshotResponseValue"> <a:DataType>DS.NAME</a:DataType> <a:DataTypeDisplayName>DS.NAME</a:DataTypeDisplayName> <a:Value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">VODAFONE GROUP</a:Value> </a:DataTypeResponseValueBase> <a:DataTypeResponseValueBase i:type="a:DataTypeSnapshotResponseValue"> <a:DataType>ISIN</a:DataType> <a:DataTypeDisplayName>ISIN CODE</a:DataTypeDisplayName> <a:Value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">GB00BH4HKS39</a:Value> </a:DataTypeResponseValueBase> </a:DataTypeValues> <a:Date>2019-05-31T00:00:00Z</a:Date> </a:SnapshotResponseItemBase> </ExecuteSnapshotRequestsResult> </ExecuteSnapshotRequestsResponse> </s:Body> </s:Envelope>`;
Я хочу вывод таким образом:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <ExecuteTimeSeriesRequestsResponse xmlns="http://tempuri.org/"> <ExecuteTimeSeriesRequestsResult xmlns:a="http://schemas.datacontract.org/2004/07/.DSWebService.WcfImpl" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:TimeSeriesResponseItem> <a:Instrument>BARC</a:Instrument> <a:InstrumentDisplay>BARCLAYS</a:InstrumentDisplay> <a:Currency>£</a:Currency> <a:DataTypeValues> <a:DataTypeResponseValueBase i:type="a:DataTypeTimeSeriesResponseValue"> <a:DataType /> <a:DataTypeDisplayName i:nil="true" /> <a:Description>BARCLAYS</a:Description> <a:Values xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:anyType i:type="c:double" xmlns:c="http://www.w3.org/2001/XMLSchema">149.34</b:anyType> <b:anyType i:type="c:double" xmlns:c="http://www.w3.org/2001/XMLSchema">149.48</b:anyType> </a:Values> </a:DataTypeResponseValueBase> // MERGED <a:DataTypeResponseValueBase i:type="a:DataTypeSnapshotResponseValue"> <a:DataType>DS.NAME</a:DataType> <a:DataTypeDisplayName>DS.NAME</a:DataTypeDisplayName> <a:Value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">BARCLAYS</a:Value> </a:DataTypeResponseValueBase> <a:DataTypeResponseValueBase i:type="a:DataTypeSnapshotResponseValue"> <a:DataType>ISIN</a:DataType> <a:DataTypeDisplayName>ISIN CODE</a:DataTypeDisplayName> <a:Value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">GB0031348658</a:Value> </a:DataTypeResponseValueBase> // MERGED </a:DataTypeValues> <a:Dates xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:dateTime>2019-05-31T00:00:00</b:dateTime> <b:dateTime>2019-06-03T00:00:00</b:dateTime> </a:Dates> <a:Frequency>D</a:Frequency> </a:TimeSeriesResponseItem> <a:TimeSeriesResponseItem> <a:Tag>0~##~VOD~##~</a:Tag> <a:Instrument>VOD</a:Instrument> <a:InstrumentDisplay>VODAFONE GROUP</a:InstrumentDisplay> <a:Currency>£</a:Currency> <a:DataTypeValues> <a:DataTypeResponseValueBase i:type="a:DataTypeTimeSeriesResponseValue"> <a:DataType /> <a:DataTypeDisplayName i:nil="true" /> <a:Description>VODAFONE GROUP</a:Description> <a:Values xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:anyType i:type="c:double" xmlns:c="http://www.w3.org/2001/XMLSchema">129.42</b:anyType> <b:anyType i:type="c:double" xmlns:c="http://www.w3.org/2001/XMLSchema">129.96</b:anyType> </a:Values> </a:DataTypeResponseValueBase> // MERGED <a:DataTypeResponseValueBase i:type="a:DataTypeSnapshotResponseValue"> <a:DataType>DS.NAME</a:DataType> <a:DataTypeDisplayName>DS.NAME</a:DataTypeDisplayName> <a:Value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">VODAFONE GROUP</a:Value> </a:DataTypeResponseValueBase> <a:DataTypeResponseValueBase i:type="a:DataTypeSnapshotResponseValue"> <a:DataType>ISIN</a:DataType> <a:DataTypeDisplayName>ISIN CODE</a:DataTypeDisplayName> <a:Value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">GB00BH4HKS39</a:Value> </a:DataTypeResponseValueBase> // MERGED </a:DataTypeValues> <a:Dates xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:dateTime>2019-05-31T00:00:00</b:dateTime> <b:dateTime>2019-06-03T00:00:00</b:dateTime> </a:Dates> <a:Frequency>D</a:Frequency> </a:TimeSeriesResponseItem> </ExecuteTimeSeriesRequestsResult> </ExecuteTimeSeriesRequestsResponse> </s:Body> </s:Envelope>