2014-04-04 2 views
0

XML 노드 이름을 변경하려고하지만이를 허용하지 않습니다. 아래 코드에서는 두 개의 템플릿이 있습니다. 1. 노드 이름 변경 2. DocumentReference의 부모 노드를 만듭니다. 내 XML 및 XSLT를 참조하십시오.XSLT를 사용하여 XML 요소 이름 변경

내 XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    <DataArea> 
    <PurchaseOrder> 
     <PurchaseOrderLine> 
      <DocumentReference> 
       <DocumentID> 
        <ID>23423</ID> 
       </DocumentID> 
      </DocumentReference> 
      <DocumentReference> 
       <DocumentID> 
        <ID>23424</ID> 
       </DocumentID> 
      </DocumentReference> 
      <Item> 
       <CustomerItemID> 
        <!-- ArtNr --> 
        <ID>444</ID> 
       </CustomerItemID> 
      </Item> 
      <Quantity unitCode="PCE">17.3</Quantity> 
     </PurchaseOrderLine> 
    </PurchaseOrder> 
    </DataArea> 

예상 결과

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    <DataArea> 
    <PurchaseOrder> 
     <POL> 
      <DocumentReference> 
       <DocumentID> 
        <ID>23423</ID> 
       </DocumentID> 
      </DocumentReference> 
      <DocumentReference> 
       <DocumentID> 
        <ID>23424</ID> 
       </DocumentID> 
      </DocumentReference> 
      <Item> 
       <CustomerItemID> 
        <!-- ArtNr --> 
        <ID>444</ID> 
       </CustomerItemID> 
      </Item> 
      <Quantity unitCode="PCE">17.3</Quantity> 
     </POL> 
    </PurchaseOrder> 
    </DataArea> 

내 XSLT

다음
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

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

    <xsl:template match="PurchaseOrderLine"> 
     <POL> 
     <xsl:apply-templates /> 
     </POL> 
    </xsl:template> 

    <xsl:template match="PurchaseOrderLine"> 
     <xsl:copy> 
     <Kiran> 
      <xsl:apply-templates select="@*|DocumentReference"/> 
     </Kiran> 
     <xsl:apply-templates select="@*|Item|Quantity"/> 
    </xsl:copy> 
    </xsl:template> 

    </xsl:stylesheet> 
+0

'match = "PurchaseOrderLine"'이있는 두 개의 템플릿을 가질 수 없습니다. 또한 자식 노드를 만든 후에는 특성을 만들 수 없습니다. –

+0

두 목표를 모두 달성하려면 어떻게해야합니까? 어떤 제안 –

+0

하나의 템플릿에서 문자 그대로의 결과 엘리먼트 인'Kiran'을 가지고 있습니다. 나는 당신이 원하는 결과를 어디서나 볼 수 없으므로 당신이 원하는 것을 말하기 어렵습니다. 명확히하십시오. –

답변

1

난 당신이 템플릿

<xsl:template match="PurchaseOrderLine"> 
    <POL> 
    <xsl:apply-templates select="@*"/> 
    <Kiran> 
     <xsl:apply-templates select="DocumentReference"/> 
    </Kiran> 
    <xsl:apply-templates select="node() except DocumentReference" /> 
    </POL> 
</xsl:template> 
같이 할 생각 0