使用xslt合并两个xml文件而不使用浏览器上下文

时间:2019-06-07 05:02:30

标签: xml xslt

我想不使用浏览器就合并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>

0 个答案:

没有答案