我想不使用浏览器就合并xml,因此基本上我使用npm library进行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>