변경

2011-10-12 3 views
2

올드 입력 XML :변경

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<SalesOrder> 
    <SalesOrderHeader> 
     <OrderNumber> 
      <BuyerOrderNumber>3016</BuyerOrderNumber> 
     </OrderNumber> 
    </SalesOrderHeader> 
    <SalesOrderDetail> 
     <ListOfItemDetail> 
      <ItemDetail> 
       <BaseItemDetail> 
        <LineItemNum> 
         <BuyerLineItemNum>00001</BuyerLineItemNum> 
        </LineItemNum> 
       </BaseItemDetail> 
      </ItemDetail> 
      <ItemDetail> 
       <BaseItemDetail> 
        <LineItemNum> 
         <BuyerLineItemNum>00002</BuyerLineItemNum> 
        </LineItemNum> 
       </BaseItemDetail> 
      </ItemDetail> 
     </ListOfItemDetail> 
    </SalesOrderDetail> 
</SalesOrder> 

기존 코드 :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/SalesOrder"> 
     <ns0:Z_SALES_ORDER xmlns:ns0="urn:sap-com:document:sap:rfc:functions" > 
      <SHEADER> 
       <xsl:call-template name="sHeader"/> 
      </SHEADER> 
      <SITEM> 
       <xsl:call-template name="sItem"/> 
      </SITEM> 
    </ns0:Z_SALES_ORDER> 
    </xsl:template> 
    <xsl:template name="sHeader"> 
     <SNUMBER> 
      <xsl:value-of select="SalesOrderHeader/OrderNumber/BuyerOrderNumber "/> 
     </SNUMBER> 
    </xsl:template> 
    <xsl:template name="sItem"> 
     <xsl:for-each select="descendant::ItemDetail"> 
      <item> 
       <B_ITEM> 
        <xsl:value-of select="BaseItemDetail/LineItemNum/BuyerLineItemNum"/> 
       </B_ITEM> 
       </item> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

필수 출력 :

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:Z_SALES_ORDER xmlns:ns0="urn:sap-com:document:sap:rfc:functions"> 
    <SHEADER> 
     <SNUMBER>3016</SNUMBER> 
    </SHEADER> 
    <SITEM> 
     <item> 
      <B_ITEM>00001</B_ITEM> 
     </item> 
     <item> 
      <B_ITEM>00002</B_ITEM> 
     </item> 
    </SITEM> 
</ns0:Z_SALES_ORDER> 

쿼리 : 이제 소스 xml에 약간의 변경 사항이 있습니다. SalesOrder 루트 노드에서 다른 정보도 전달합니다. 입력 파일은 아래와 같습니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<SalesOrder xmlns="abc:org.xcbl:schemas/xcbl/v4/xcbl4.xsd" xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding"> 
    <SalesOrderHeader> 
     <OrderNumber> 
      <BuyerOrderNumber>3016</BuyerOrderNumber> 
     </OrderNumber> 
    </SalesOrderHeader> 
    <SalesOrderDetail> 
     <ListOfItemDetail> 
      <ItemDetail> 
       <BaseItemDetail> 
        <LineItemNum> 
         <BuyerLineItemNum>00001</BuyerLineItemNum> 
        </LineItemNum> 
       </BaseItemDetail> 
      </ItemDetail> 
      <ItemDetail> 
       <BaseItemDetail> 
        <LineItemNum> 
         <BuyerLineItemNum>00002</BuyerLineItemNum> 
        </LineItemNum> 
       </BaseItemDetail> 
      </ItemDetail> 
     </ListOfItemDetail> 
    </SalesOrderDetail> 
</SalesOrder> 

당신은 내가 이전 입력 XML 파일을 사용하여 얻는 것과 같은 출력을 얻을하는 방법을 말해 주 시겠어요.

편집 쿼리 : SalesOrder 루트 노드에서 다른 정보도 전달합니다. 입력 파일은 아래와 같습니다. XSLT를 사용하여 rootnode 정보를 얻는 방법?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<SalesOrder xmlns="abc:org.xcbl:schemas/xcbl/v4/xcbl4.xsd" xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding"> 
    <SalesOrderHeader> 
     <OrderNumber> 
      <BuyerOrderNumber>3016</BuyerOrderNumber> 
     </OrderNumber> 
    </SalesOrderHeader> 
</SalesOrder> 
+0

안녕 - 나는 마지막에 편집과 같이 개정 우리의 원래의 Q를 복원하고 A와 추가의 자유를 촬영했습니다 : 가장 쉬운 별칭을 사용하는 것입니다 - 커뮤니티의 다른 사람들은 전체 스레드를 볼 수 있습니다. 새로운 Q를 사용하면 전체 SalesOrderHeader 요소를 '그대로'출력에 복사 (축 어)하고 싶습니까? 또는 ns0 : Z_SALES_ORDER 루트 요소 출력에 새 네임 스페이스 (SOAP-ENV, SOAP-ENC)를 모두 유지하고 싶습니까? – StuartLC

답변

1

새로운 XML에는 네임 스페이스가있는 xpath를 정규화하는 데 필요한 네임 스페이스가 있습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" 
       xmlns:abc="abc:org.xcbl:schemas/xcbl/v4/xcbl4.xsd" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       exclude-result-prefixes="abc xsl" 
       > 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/abc:SalesOrder"> 
     <ns0:Z_SALES_ORDER xmlns:ns0="urn:sap-com:document:sap:rfc:functions" > 
      <SHEADER> 
       <xsl:call-template name="sHeader"/> 
      </SHEADER> 
      <SITEM> 
       <xsl:call-template name="sItem"/> 
      </SITEM> 
     </ns0:Z_SALES_ORDER> 
    </xsl:template> 
    <xsl:template name="sHeader"> 
     <SNUMBER> 
      <xsl:value-of select="abc:SalesOrderHeader/abc:OrderNumber/abc:BuyerOrderNumber "/> 
     </SNUMBER> 
    </xsl:template> 
    <xsl:template name="sItem"> 
     <xsl:for-each select="descendant::abc:ItemDetail"> 
      <item> 
       <B_ITEM> 
        <xsl:value-of select="abc:BaseItemDetail/abc:LineItemNum/abc:BuyerLineItemNum"/> 
       </B_ITEM> 
      </item> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

편집 (새라)

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:abc="abc:org.xcbl:schemas/xcbl/v4/xcbl4.xsd" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="abc xsl"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/abc:SalesOrder"> 
    <ns0:Z_SALES_ORDER xmlns:ns0="urn:sap-com:document:sap:rfc:functions"> 
    <SNUMBER> 
     <xsl:value-of select="abc:SalesOrderHeader/abc:OrderNumber/abc:BuyerOrderNumber "/> 
    </SNUMBER> 
    </ns0:Z_SALES_ORDER> 
    </xsl:template> 
</xsl:stylesheet> 
+0

귀중한 솔루션에 감사드립니다. – Sara