使用XSLT实现XML到XML的转换
我必须将XML转换为另一种XML结构 源XML:使用XSLT实现XML到XML的转换,xml,xslt,Xml,Xslt,我必须将XML转换为另一种XML结构 源XML: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <urn:LookupRecords xmlns:urn="urn:RedIron.RetailRepository.Services.SearchService" xmlns:a="urn:RedIron.RetailRe
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<urn:LookupRecords xmlns:urn="urn:RedIron.RetailRepository.Services.SearchService" xmlns:a="urn:RedIron.RetailRepository.Core" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<urn:query>
<a:Headers>
<a:SearchHeader>
<a:Name>MAX_RESULTS</a:Name>
<a:ProviderGuid>00000000-0000-0000-0000-000000000000</a:ProviderGuid>
<a:Value>10</a:Value>
</a:SearchHeader>
<a:SearchHeader>
<a:Name>CASHIER</a:Name>
<a:Value>1706</a:Value>
</a:SearchHeader>
<a:SearchHeader>
<a:Name>RECEIPT_LOOKUP</a:Name>
<a:Value>CustomerReceipt</a:Value>
</a:SearchHeader>
</a:Headers>
<a:Params>
<arr:KeyValueOfguidArrayOfQueryParametertmL6yAXy>
<arr:Key>{4de38819-43bf-4333-a17b-049ec32703c3}</arr:Key>
<arr:Value>
<a:QueryParameter>
<a:Name>TRAINING_MODE</a:Name>
<a:Value>FALSE</a:Value>
</a:QueryParameter>
<a:QueryParameter>
<a:Name>STORE</a:Name>
<a:Value>121</a:Value>
</a:QueryParameter>
<a:QueryParameter>
<a:Name>REGISTER</a:Name>
<a:Value>2</a:Value>
</a:QueryParameter>
<a:QueryParameter>
<a:Name>TRANSACTION_NUMBER</a:Name>
<a:Value>1843</a:Value>
</a:QueryParameter>
<a:QueryParameter>
<a:Name>TRANSACTION_DATE_YEAR</a:Name>
<a:Value>2016</a:Value>
</a:QueryParameter>
<a:QueryParameter>
<a:Name>TRANSACTION_DATE_MONTH</a:Name>
<a:Value>12</a:Value>
</a:QueryParameter>
<a:QueryParameter>
<a:Name>TRANSACTION_DATE_DAY</a:Name>
<a:Value>20</a:Value>
</a:QueryParameter>
<a:QueryParameter>
<a:Name>CONCEPT</a:Name>
<a:Value>WS</a:Value>
</a:QueryParameter>
</arr:Value>
</arr:KeyValueOfguidArrayOfQueryParametertmL6yAXy>
</a:Params>
</urn:query>
</urn:LookupRecords>
</soapenv:Body>
</soapenv:Envelope>
最大结果
00000000-0000-0000-0000-000000000000
10
出纳员
1706
收据查询
客户接收
{4de38819-43bf-4333-a17b-049ec32703c3}
培训模式
错误的
贮藏
121
登记
2.
交易编号
1843
交易日期年
2016
交易日期月份
12
交易日
20
概念
WS
输出XML应该是:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetRecordResponse xmlns="urn:RedIron.RetailRepository.Services.SearchService">
<GetRecordResult xmlns:a="urn:RedIron.RetailRepository.Core" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Exception i:nil="true"/>
<a:ResponseHeaders>
<a:Header>
<a:Name>RECEIPT_LOOKUP</a:Name>
<a:Value/>
</a:Header>
<a:Header>
<a:Name>CASHIER</a:Name>
<a:Value>1111</a:Value>
</a:Header>
<a:Header>
<a:Name>STORE</a:Name>
<a:Value>281</a:Value>
</a:Header>
</a:ResponseHeaders>
<a:SearchResults>
<a:Result>
<a:RecordData>
<Transaction xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TransactionKey>
<TransactionNumber>8407</TransactionNumber>
<StoreNumber>281</StoreNumber>
<RegisterNumber>9</RegisterNumber>
<TransactionStatus>0</TransactionStatus>
<POSMode>0</POSMode>
<BusinessDate>
<Year>2016</Year>
<Month>12</Month>
<Day>12</Day>
<Hour>0</Hour>
<Minute>0</Minute>
<Second>0</Second>
</BusinessDate>
</TransactionKey>
<TransactionData>
<CashierId>1111</CashierId>
<SalesPersonId>1111</SalesPersonId>
<ReferencedTransactionNumber>0</ReferencedTransactionNumber>
<TransactionTimeStamp>
<Year>2016</Year>
<Month>12</Month>
<Day>12</Day>
<Hour>19</Hour>
<Minute>43</Minute>
<Second>57</Second>
</TransactionTimeStamp>
</TransactionData>
<MerchandiseItem>
<Header>
<RecordSequenceNumber>1</RecordSequenceNumber>
</Header>
<Data>
<Sku>100214</Sku>
<Department>911</Department>
<Quantity>1.0000</Quantity>
<ExtendedSellingPrice>10.0000</ExtendedSellingPrice>
<ExtendedOriginalPrice>10.0000</ExtendedOriginalPrice>
<Description>Test Item 9</Description>
<ItemVoidFlag>false</ItemVoidFlag>
<ItemReturnFlag>false</ItemReturnFlag>
<PriceOverride>false</PriceOverride>
<EmployeeSaleFlag>false</EmployeeSaleFlag>
<AdditionalAmount>0.00</AdditionalAmount>
<PLUFlag>true</PLUFlag>
<DiscountFlag>false</DiscountFlag>
<ProfilePromptFlag>false</ProfilePromptFlag>
<PriceLevel>0</PriceLevel>
<QuantityCluster>0</QuantityCluster>
<LinkedItem>false</LinkedItem>
<ScannedItem>false</ScannedItem>
<PriceOverrideReason>0</PriceOverrideReason>
<PromotionNumber>0</PromotionNumber>
<MixMatchNumber>0</MixMatchNumber>
<ExtendedOrigPriceWithPriceOverride>10.00</ExtendedOrigPriceWithPriceOverride>
<PriceLevel2>0.00</PriceLevel2>
<TransactionTaxAllocation>
<TaxProrations>
<TaxProration>
<index>1</index>
<amount>0.8500</amount>
<jurisdiction xsi:nil="true"/>
</TaxProration>
</TaxProrations>
</TransactionTaxAllocation>
</Data>
<Annotations>
<Annotation Source="OrderEntry">
<IsOrderEntryItem>False</IsOrderEntryItem>
</Annotation>
</Annotations>
<ResultAnnotations>
<SearchResultAnnotation>
<ProviderGuid>7283d946-62bf-46cf-8e1d-47599e895894</ProviderGuid>
<Annotations>
<XElement>
<ReturnMerchItem>
<ReturnableQuantity>1.0000</ReturnableQuantity>
<ReturnableValue>10.0000</ReturnableValue>
</ReturnMerchItem>
</XElement>
</Annotations>
</SearchResultAnnotation>
</ResultAnnotations>
</MerchandiseItem>
<Tender>
<Header>
<RecordSequenceNumber>9</RecordSequenceNumber>
</Header>
<Data>
<TenderId>5</TenderId>
<TenderAmount>10.8500</TenderAmount>
<ChangeDue>0.0000</ChangeDue>
<ExchangeAmount>0.0000</ExchangeAmount>
<MaskedCardNumber>523345******0102</MaskedCardNumber>
<PaymentToken>hNL4MB7lFPF176spN8tJ</PaymentToken>
<MatchingToken>4137452508934584316</MatchingToken>
<CardholderName>ND 2/MASTERCARD TRACK 1 A</CardholderName>
</Data>
</Tender>
<Receipts>
<Receipt>
<Header>
<RecordType>CustomerReceipt</RecordType>
</Header>
<Data>
<Type>CustomerReceipt</Type>
</Data>
</Receipt>
</Receipts>
</Transaction>
</a:RecordData>
<a:ResponseHeaders i:nil="true"/>
<a:TransactionKey>
<a:BusinessDate>2016-12-12T00:00:00</a:BusinessDate>
<a:POSMode>0</a:POSMode>
<a:RegisterNumber>9</a:RegisterNumber>
<a:StoreNumber>281</a:StoreNumber>
<a:TransactionNumber>8407</a:TransactionNumber>
<a:TransactionStatus>0</a:TransactionStatus>
</a:TransactionKey>
</a:Result>
</a:SearchResults>
<a:StatusCode>Success</a:StatusCode>
<a:StatusCodeReason i:nil="true"/>
</GetRecordResult>
</GetRecordResponse>
</s:Body>
</s:Envelope>
收据查询
出纳员
1111
贮藏
281
8407
281
9
0
0
2016
12
12
0
0
0
1111
1111
0
2016
12
12
19
43
57
1.
100214
911
1
10
10
测试项目9
假的
假的
假的
假的
0
真的
假的
假的
0
0
假的
假的
0
0
0
10
0
1.
0.8500
假的
7283d946-62bf-46cf-8e1d-47599e895894
1
10
9
5.
10.8500
0
0
523345******0102
hNL4MB7lFPF176spN8tJ
4137452508934584316
ND 2/万事达卡磁道1 A
客户接收
客户接收
2016-12-12T00:00:00
0
9
281
8407
0
成功
现在,我尝试创建一个XSLT,如:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:a="urn:RedIron.RetailRepository.Core"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match = "a:Headers" >
<s:Envelope>
<s:Body>
<xsl:element name="GetRecordResponse" namespace="urn:RedIron.RetailRepository.Services.SearchService">
<GetRecordResponse xmlns="urn:RedIron.RetailRepository.Services.SearchService" >
<GetRecordResult xmlns:a="urn:RedIron.RetailRepository.Core" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Exception i:nil="true">
<a:ResponseHeaders>
<xsl:copy-of select="a:SearchHeader"/>
</a:ResponseHeaders>
</a:Exception>
</GetRecordResult>
</GetRecordResponse>
</xsl:element>
</s:Body>
</s:Envelope>
</xsl:template>
</xsl:stylesheet>
现在,我无法更改
至
请告诉我我是否采用了正确的方法,或者是否有更简单的方法来做到这一点。假设您希望保留相同的内容,只需更改标记名,您可以采用这种方法(简化输入)
红色
2000
蓝色
2010
使用这个xsl
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<root>
<xsl:apply-templates select="//car"/>
</root>
</xsl:template>
<xsl:template match="car">
<newTagForCar>
<xsl:copy-of select="./*"/>
</newTagForCar>
</xsl:template>
</xsl:stylesheet>
给你这个结果
<?xml version="1.0" encoding="UTF-8"?>
<root>
<newTagForCar>
<color>red</color>
<year>2000</year>
</newTagForCar>
<newTagForCar>
<color>blue</color>
<year>2010</year>
</newTagForCar>
</root>
红色
2000
蓝色
2010
请描述您希望XSLT做什么。不要让我们仔细检查前后的XML,看看它们有什么不同。我想把这一部分:'MAX_RESULTS 00000000-0000-0000-0000-00000010'改为:'MAX_RESULTS 00000000-0000-0000-00000010'这个答案行得通吗建议?如果是,请标记为已接受
<?xml version="1.0" encoding="UTF-8"?>
<root>
<newTagForCar>
<color>red</color>
<year>2000</year>
</newTagForCar>
<newTagForCar>
<color>blue</color>
<year>2010</year>
</newTagForCar>
</root>