我的要求如下
输入XML :
<even:OrderEvent xmlns:are="http://www.org.com/EBO/AreaV2" xmlns:com="http://www.org.com/CommonV3" xmlns:com1="http://www.org.com/CommonV2" xmlns:com2="http://www.org.com/Common" xmlns:com3="http://www.org.com/CommonV4" xmlns:con="http://www.org.com/EBO/ConceptV2" xmlns:cor="http://www.org.com/EBO/CorporationV2" xmlns:div="http://www.org.com/EBO/DivisionV2" xmlns:emp="http://www.org.com/EBO/EmployeeV2" xmlns:even="http://www.org.com/EBO/Order/EventsV4" xmlns:gif="http://www.org.com/EBO/GiftCardItemV3" xmlns:gues="http://www.org.com/EBO/GuestV3" xmlns:loc="http://www.org.com/EBO/LocationV2" xmlns:loc1="http://www.org.com/EBO/LocationV3" xmlns:loy="http://www.org.com/EBO/LoyaltyAccountV1" xmlns:mar="http://www.org.com/EBO/MarketingV1" xmlns:men="http://www.org.com/EBO/MenuItem" xmlns:off="http://www.org.com/EBO/OfferV1" xmlns:ord="http://www.org.com/Message/OrderServiceV3" xmlns:ord1="http://www.org.com/EBO/OrderV3" xmlns:pay="http://www.org.com/EBO/PaymentItemV3" xmlns:reg="http://www.org.com/EBO/RegionV2" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tax="http://www.org.com/EBO/TaxItemV3">
<even:Body>
<even:OrderType>GC</even:OrderType>
<ord1:Order currencyCode="USD">
<!--Optional:-->
<ord1:OrderClassification>STANDARD</ord1:OrderClassification>
<!--Optional:-->
<ord1:OrderIDs/>
<!--Optional:-->
<ord1:BusinessDate>2016-09-02T01:45:12.145-04:00</ord1:BusinessDate>
<!--Optional:-->
<ord1:Revision>0</ord1:Revision>
<!--Optional:-->
<ord1:OrderStatus>CONFIRMED</ord1:OrderStatus>
<!--Optional:-->
<ord1:OrderItems/>
<ord1:BillingInformation>
<!--Optional:-->
<com1:Name>
<!--Optional:-->
<com1:FirstName>Jack</com1:FirstName>
<!--Optional:-->
<com1:LastName>Myka</com1:LastName>
</com1:Name>
<!--Optional:-->
<com:ContactInformation DoNotContact="false">
<!--Optional:-->
<com:Addresses DoNotContact="false">
<!--1 or more repetitions:-->
<com:Address CorrelationID="83" DoNoContact="false">
<!--Optional:-->
<com:AddressKind>Other</com:AddressKind>
<!--Optional:-->
<com:Line1>55 brd st</com:Line1>
<!--Optional:-->
<com:Line2>new york</com:Line2>
<!--Optional:-->
<!--Optional:-->
<com:CityName>New York</com:CityName>
<!--Optional:-->
<com:StateProvinceCode>NY</com:StateProvinceCode>
<!--Optional:-->
<com:CountyName>USA</com:CountyName>
<!--Optional:-->
<com:CountryCode>US</com:CountryCode>
<!--Optional:-->
<com:PostalCode>10004</com:PostalCode>
</com:Address>
</com:Addresses>
<!--Optional:-->
<com:Emails DoNotContact="true">
<!--Zero or more repetitions:-->
<com:Email CorrelationID="38" IsDMAOptout="true" IsDeliverable="true" IsPrimary="true">
<com1:EmailAddress>jack786@out.com</com1:EmailAddress>
</com:Email>
</com:Emails>
</com:ContactInformation>
<com:CompanyName>Farmers</com:CompanyName>
<com2:SourceIDs>
<!--1 or more repetitions:-->
<com2:SourceID>
<!--Optional:-->
<com2:ID>5636546348</com2:ID>
<com2:Source>DP</com2:Source>
</com2:SourceID>
</com2:SourceIDs>
</ord1:BillingInformation>
<ord1:CreateDate>2016-09-02T01:45:12.145-04:00</ord1:CreateDate>
<!--Optional:-->
<ord1:ModifyDate>2016-09-02T01:45:12.145-04:00</ord1:ModifyDate>
</ord1:Order>
</even:Body>
</even:OrderEvent>
使用XSLT :
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet exclude-result-prefixes="xsd xsi oracle-xsl-mapper xsl EventsV4 tns oraxsl xp20 xref mhdr oraext dvm socket" version="1.0" xmlns:CommonV2="http://www.org.com/CommonV2" xmlns:EventsV4="http://www.org.com/EBO/Order/EventsV4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<tns:PublishOrderEventRequest>
<EventsV4:OrderEvent>
<xsl:apply-templates select="EventsV4:OrderEvent/EventsV4:Body"/>
</EventsV4:OrderEvent>
</tns:PublishOrderEventRequest>
</xsl:template>
<xsl:template match="/EventsV4:OrderEvent/EventsV4:Body">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="/orderV3:BillingInformation/*:SourceIDs/*:SourceID/*:ID/text()">
12345
</xsl:template>
</xsl:stylesheet>`
我想对节点Body进行Identity转换,并且还要替换 源ID的文本值。在目标中我有一个 不同的根节点,我想只复制源的一部分 身体到目标。复制后,我想替换几个文本 身体里的价值观。没有发生复制和替换。
答案 0 :(得分:0)
@exclude-result-prefixes
中的前缀多于xmlns:..
声明的前缀。也许只是缺乏缩小的例子。
请查看Location Paths。 /orderV3:BillingInformation
表示您要选择根节点orderV3:BillingINformation
。但是,您的示例中的正确根是even:OrderEvent
。因此,您必须跳过该特定模式的前导/
。
仍然需要正确的命名空间声明。
<xsl:stylesheet
exclude-result-prefixes="xsi xsl EventsV4 tns"
version="1.0"
xmlns:CommonV2="http://www.org.com/CommonV2"
xmlns:EventsV4="http://www.org.com/EBO/Order/EventsV4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tns="http://todo"
xmlns:orderV3="http://www.org.com/EBO/OrderV3">
<xsl:template match="/">
<tns:PublishOrderEventRequest>
<EventsV4:OrderEvent>
<xsl:apply-templates select="EventsV4:OrderEvent/EventsV4:Body"/>
</EventsV4:OrderEvent>
</tns:PublishOrderEventRequest>
</xsl:template>
<xsl:template match="/EventsV4:OrderEvent/EventsV4:Body">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="orderV3:BillingInformation/*:SourceIDs/*:SourceID/*:ID/text()">
<xsl:text>12345</xsl:text>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>