2016-06-17 10 views
0

以下のように入力xmlがあり、出力は次のようになります。XSLTを使用して部分XMLをコピーする

入力XML:そのため、私はこれ以下のようないくつかのものが動作していない書き込みXSLTを持って

<ShippingDetails> 
      <ApplyShippingDiscount>false</ApplyShippingDiscount> 
      <CalculatedShippingRate> 
       <WeightMajor measurementSystem="English" unit="lbs">0</WeightMajor> 
       <WeightMinor measurementSystem="English" unit="oz">0</WeightMinor> 
      </CalculatedShippingRate> 
      <SalesTax> 
       <SalesTaxPercent>0.0</SalesTaxPercent> 
       <ShippingIncludedInTax>false</ShippingIncludedInTax> 
      </SalesTax> 
      <ShippingServiceOptions> 
       <ShippingService>ShippingMethodStandard</ShippingService> 
       <ShippingServiceCost currencyID="USD">0.0</ShippingServiceCost> 
       <ShippingServiceAdditionalCost currencyID="USD">0.0</ShippingServiceAdditionalCost> 
       <ShippingServicePriority>1</ShippingServicePriority> 
       <ExpeditedService>false</ExpeditedService> 
       <ShippingTimeMin>1</ShippingTimeMin> 
       <ShippingTimeMax>6</ShippingTimeMax> 
       <FreeShipping>true</FreeShipping> 
      </ShippingServiceOptions> 
      <ExcludeShipToLocation>PO Box</ExcludeShipToLocation> 
      <SellerExcludeShipToLocationsPreference>true</SellerExcludeShipToLocationsPreference> 
     </ShippingDetails> 

<GetItemResponse xmlns="urn:api:pis:BaseComponents"> 
    <Ack>Success</Ack> 
    <Item> 
     <AutoPay>false</AutoPay> 
     <ListingDetails> 
      <Adult>false</Adult> 
      <EndingReason>NotAvailable</EndingReason> 
     </ListingDetails> 
     <Duration>35</Duration> 
     <ShippingDetails> 
      <ApplyShippingDiscount>false</ApplyShippingDiscount> 
      <CalculatedShippingRate> 
       <WeightMajor measurementSystem="English" unit="lbs">0</WeightMajor> 
       <WeightMinor measurementSystem="English" unit="oz">0</WeightMinor> 
      </CalculatedShippingRate> 
      <SalesTax> 
       <SalesTaxPercent>0.0</SalesTaxPercent> 
       <ShippingIncludedInTax>false</ShippingIncludedInTax> 
      </SalesTax> 
      <ShippingServiceOptions> 
       <ShippingService>ShippingMethodStandard</ShippingService> 
       <ShippingServiceCost currencyID="USD">0.0</ShippingServiceCost> 
       <ShippingServiceAdditionalCost currencyID="USD">0.0</ShippingServiceAdditionalCost> 
       <ShippingServicePriority>1</ShippingServicePriority> 
       <ExpeditedService>false</ExpeditedService> 
       <ShippingTimeMin>1</ShippingTimeMin> 
       <ShippingTimeMax>6</ShippingTimeMax> 
       <FreeShipping>true</FreeShipping> 
      </ShippingServiceOptions> 
      <ExcludeShipToLocation>PO Box</ExcludeShipToLocation> 
      <SellerExcludeShipToLocationsPreference>true</SellerExcludeShipToLocationsPreference> 
     </ShippingDetails> 
     <ShipToLocations>US</ShipToLocations> 
     <HideFromSearch>false</HideFromSearch> 
    </Item> 
</GetItemResponse> 

は、出力XMLは次のようになります必要があります。私はxslt 2.0を使用しています。親切にも、このxsltの変換を手伝ってください。

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns="urn:ebay:apis:eBLBaseComponents"> 
    <xsl:output indent="yes" method="xml" encoding="utf-8" omit-xml-declaration="yes" /> 
    <xsl:template match="/"> 
     <ItemFee> 
      <product_id></product_id> 
      <Details> 
       <xsl:choose> 
        <xsl:when test="/ns:GetItemResponse/ns:Ack = 'Failure'"> 
         <Ack>Failure</Ack> 
         <itemid>0</itemid> 
         <ebay_listing_status>-3</ebay_listing_status> 
         <status>FALSE</status> 
         <listed_timestamp>now</listed_timestamp> 
         <listing_reason> 
          <xsl:value-of select="/ns:GetItemResponse/ns:Errors[position()=last()]/ns:LongMessage"/> 
         </listing_reason> 
        </xsl:when> 
        <xsl:otherwise> 
        </xsl:otherwise> 
       </xsl:choose> 
      </Details> 
     </ItemFee> 
    </xsl:template> 

    <xsl:template match="*"> 
     <xsl:element name="{local-name()}"> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:element> 
    </xsl:template> 
    <xsl:template match="@*"> 
     <xsl:attribute name="{local-name()}"> 
      <xsl:value-of select="."/> 
     </xsl:attribute> 
    </xsl:template> 

<xsl:template match="ShippingDetails"> 
<xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
+1

変換**の必須ロジックについては、例ではなく**の**単語で説明してください。 –

答えて

2

あなたは、単に要素を抽出し、名前空間を削除したい場合、それは私があなたの投稿を入力サンプル

に対してサクソン9.7 HEを使用する場合

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xpath-default-namespace="urn:api:pis:BaseComponents" 
    exclude-result-prefixes="xs" 
    version="2.0"> 

    <xsl:template match="*"> 
     <xsl:element name="{local-name()}"> 
      <xsl:copy-of select="@*"/> 
      <xsl:apply-templates/> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="/"> 
     <xsl:apply-templates select="/GetItemResponse/Item[1]/ShippingDetails[1]"/> 
    </xsl:template> 

</xsl:stylesheet> 

を使用することで十分です

<?xml version="1.0" encoding="UTF-8"?> 
<GetItemResponse xmlns="urn:api:pis:BaseComponents"> 
    <Ack>Success</Ack> 
    <Item> 
     <AutoPay>false</AutoPay> 
     <ListingDetails> 
      <Adult>false</Adult> 
      <EndingReason>NotAvailable</EndingReason> 
     </ListingDetails> 
     <Duration>35</Duration> 
     <ShippingDetails> 
      <ApplyShippingDiscount>false</ApplyShippingDiscount> 
      <CalculatedShippingRate> 
       <WeightMajor measurementSystem="English" unit="lbs">0</WeightMajor> 
       <WeightMinor measurementSystem="English" unit="oz">0</WeightMinor> 
      </CalculatedShippingRate> 
      <SalesTax> 
       <SalesTaxPercent>0.0</SalesTaxPercent> 
       <ShippingIncludedInTax>false</ShippingIncludedInTax> 
      </SalesTax> 
      <ShippingServiceOptions> 
       <ShippingService>ShippingMethodStandard</ShippingService> 
       <ShippingServiceCost currencyID="USD">0.0</ShippingServiceCost> 
       <ShippingServiceAdditionalCost currencyID="USD">0.0</ShippingServiceAdditionalCost> 
       <ShippingServicePriority>1</ShippingServicePriority> 
       <ExpeditedService>false</ExpeditedService> 
       <ShippingTimeMin>1</ShippingTimeMin> 
       <ShippingTimeMax>6</ShippingTimeMax> 
       <FreeShipping>true</FreeShipping> 
      </ShippingServiceOptions> 
      <ExcludeShipToLocation>PO Box</ExcludeShipToLocation> 
      <SellerExcludeShipToLocationsPreference>true</SellerExcludeShipToLocationsPreference> 
     </ShippingDetails> 
     <ShipToLocations>US</ShipToLocations> 
     <HideFromSearch>false</HideFromSearch> 
    </Item> 
</GetItemResponse> 

出力は

<?xml version="1.0" encoding="UTF-8"?><ShippingDetails> 
         <ApplyShippingDiscount>false</ApplyShippingDiscount> 
         <CalculatedShippingRate> 
           <WeightMajor measurementSystem="English" unit="lbs">0</WeightMajor> 
           <WeightMinor measurementSystem="English" unit="oz">0</WeightMinor> 
         </CalculatedShippingRate> 
         <SalesTax> 
           <SalesTaxPercent>0.0</SalesTaxPercent> 
           <ShippingIncludedInTax>false</ShippingIncludedInTax> 
         </SalesTax> 
         <ShippingServiceOptions> 
           <ShippingService>ShippingMethodStandard</ShippingService> 
           <ShippingServiceCost currencyID="USD">0.0</ShippingServiceCost> 
           <ShippingServiceAdditionalCost currencyID="USD">0.0</ShippingServiceAdditionalCost> 
           <ShippingServicePriority>1</ShippingServicePriority> 
           <ExpeditedService>false</ExpeditedService> 
           <ShippingTimeMin>1</ShippingTimeMin> 
           <ShippingTimeMax>6</ShippingTimeMax> 
           <FreeShipping>true</FreeShipping> 
         </ShippingServiceOptions> 
         <ExcludeShipToLocation>PO Box</ExcludeShipToLocation> 
         <SellerExcludeShipToLocationsPreference>true</SellerExcludeShipToLocationsPreference> 
       </ShippingDetails> 
+0

これは予期しない結果をもたらしています。これは出力として空のXMLを生成します。我々は、オンラインxsltトランスツールでもチェックすることができます。 – Simbu

+0

@Simbu、私はテストに使用したXSLT 2.0プロセッサーとテスト入出力データに関する情報を追加しました。使用したXSLT 2.0プロセッサを教えてください。 –

+0

ありがとうそれは私のために働いた。 :) – Simbu

関連する問題