2013-02-27 4 views
0

다음과 같이 요청 XML이 있습니다.이 XML은 다른 형식으로 변환해야합니다. 이걸 좀 도와 줘요.XSLT - 변환이 올바르게 작동하지 않습니다.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <ns2:fetchOrderListResponse xmlns:ns2="http://impl.lob.wipro.com/"> 
     <return> 
      <customerOrderNumber>1</customerOrderNumber> 
      <orderId>E147011D-AE9F-4AC8-AF37-05DC538AF1D0</orderId> 
      <ordertotal>0</ordertotal> 
     </return> 
     <return> 
      <customerOrderNumber>1</customerOrderNumber> 
      <orderDetails> 
       <itemPrice>50.0</itemPrice> 
       <itemQty>2</itemQty> 
       <itemUnit>0</itemUnit> 
       <orderDetailsId>37516016-D71B-4790-951F-55D00B0CC159</orderDetailsId> 
      </orderDetails> 
      <orderDetails> 
       <itemPrice>39.0</itemPrice> 
       <itemQty>3</itemQty> 
       <itemUnit>0</itemUnit> 
       <orderDetailsId>6095ABC7-0D0D-4B2E-92E5-80F24E9092B8</orderDetailsId> 
      </orderDetails> 
      <orderId>84EC371D-40CA-455E-A0FA-7EA733E9BFD3</orderId> 
      <ordertotal>217</ordertotal> 
     </return> 
     <return> 
      <customerOrderNumber>1</customerOrderNumber> 
      <orderId>54712493-2172-4ADB-814B-BC7AA0BB72C3</orderId> 
      <ordertotal>0</ordertotal> 
     </return> 
     <return> 
      <customerOrderNumber>1</customerOrderNumber> 
      <deliverydate>2013-02-06T00:00:00+05:30</deliverydate> 
      <orderDetails> 
       <itemPrice>565.0</itemPrice> 
       <itemQty>1</itemQty> 
       <itemUnit>0</itemUnit> 
       <orderDetailsId>9A5030BE-F95F-4C62-B5A2-41FF85423218</orderDetailsId> 
      </orderDetails> 
      <orderDetails> 
       <itemPrice>4.0</itemPrice> 
       <itemQty>90</itemQty> 
       <itemUnit>0</itemUnit> 
       <orderDetailsId>65A8B3BE-D407-43D8-8754-EA1E26AA56E4</orderDetailsId> 
      </orderDetails> 
      <orderId>0BDCB222-0117-47A9-8813-DF03A1D19E5E</orderId> 
      <ordertotal>925</ordertotal> 
     </return> 
     <return> 
      <customerOrderNumber>1</customerOrderNumber> 
      <orderId>8E4220DC-884B-47BC-A565-E26B80BA5249</orderId> 
      <ordertotal>0</ordertotal> 
     </return> 
     <return> 
      <customerOrderNumber>1</customerOrderNumber> 
      <deliverydate>2013-02-06T00:00:00+05:30</deliverydate> 
      <orderDetails> 
       <itemPrice>10.0</itemPrice> 
       <itemQty>4</itemQty> 
       <itemUnit>0</itemUnit> 
       <orderDetailsId>5A2DF895-BB0F-4039-80DB-F44CED31697B</orderDetailsId> 
      </orderDetails> 
      <orderDetails> 
       <itemPrice>20.0</itemPrice> 
       <itemQty>3</itemQty> 
       <itemUnit>0</itemUnit> 
       <orderDetailsId>8034FBF4-B573-4B19-BDF5-FAF6C4247A55</orderDetailsId> 
      </orderDetails> 
      <orderId>60161E3E-3C4A-4CE6-AAC3-E4D2BC240046</orderId> 
      <ordertotal>100</ordertotal> 
     </return> 
     </ns2:fetchOrderListResponse> 
    </soap:Body> 
</soap:Envelope> 

응답은 다음과 같은 형식이어야합니다. XSLT로 변환 해주세요.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.client.inmemory.eim.wipro.com/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ser:getOrderDetailResponse> 
     <!--Zero or more repetitions:--> 
     <return> 
      <itemPrice>?</itemPrice> 
      <itemQty>?</itemQty> 
      <itemUnit>?</itemUnit> 
      <!--Optional:--> 
      <orderDetailsId>?</orderDetailsId> 
      <!--Optional:--> 
      <orderId>?</orderId> 
     </return> 
     </ser:getOrderDetailResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

이렇게하려면 XSLT가 필요했습니다. 불행히도 그것은 작동하지 않고 어떤 데이터도 가져 오지 않습니다. 친절하게 내가 잘못하고있는 것을 알려주십시오.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.client.inmemory.eim.wipro.com/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ser:getOrderDetailResponse> 
     <!--Zero or more repetitions:--> 
     <return> 
<xsl:for-each select="return/orderDetails"> 
      <itemPrice><xsl:value-of select="return/orderDetails/itemPrice"/></itemPrice> 
      <itemQty><xsl:value-of select="return/orderDetails/itemQty"/></itemQty> 
      <itemUnit><xsl:value-of select="return/orderDetails/itemUnit"/></itemUnit> 
      <orderDetailsId><xsl:value-of select="return/orderDetails/orderDetailsId"/></orderDetailsId> 
      <orderId><xsl:value-of select="orderId"/></orderId> 
</xsl:for-each> 
     </return> 
     </ser:getOrderDetailResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 
</xsl:template> 
</xsl:stylesheet> 

답변

1

왜 처음 질문을 삭제하고 똑같은 질문을 다시 올렸는지 확실하지 않습니다. XSLT를 추가 한 후에는 답할 수있는 질문이었습니다.

어쨌든 템플릿이 /과 일치하지만, return/orderDetails에서 시작하는 xsl:for-each을 시도하면 문제가 발생합니다. XSLT의 컨텍스트에주의를 기울여야합니다. 먼저 xsl:stylesheet에 적절한 네임 스페이스를 추가

...

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ns2="http://impl.lob.wipro.com/" 

둘째, 당신의 select 따라 조정 :

<xsl:for-each select="/soap:Envelope/soap:Body/ns2:fetchOrderListResponse/return/orderDetails"> 

잘 모르겠어요 이것이 당신이 찾고있는 정확하게 반환하는 경우 하지만 데이터를 반환합니다. 출력을 확인한 후에 조정할 수 있어야합니다.

관련 문제