2013-08-23 2 views
1

템플릿 복사를 사용하고 하나의 XSLT를 사용하여 부모 요소와 하위 요소에 새 요소 및 특성을 추가하려고하지만 결과를 볼 수 없습니다. 기대하고있다.단일 XSLT를 사용하여 상위 요소와 하위 요소 모두에 새 요소/특성 추가

저는 XSLT를 처음 사용하고 여러 템플릿에서 루트 요소와 일치하는 템플릿 만 작동합니다. 자식 요소와 일치하는 다른 템플릿이 작동하지 않습니다.

도움과 기술이 도움이 될 것입니다.

원본 XML

<?xml version="1.0" encoding="UTF-8"?> 
<Order> 
    <OrderLines Type="Text"> 
     <OrderLine Type="Fine Print"> 

     </OrderLine> 
    </OrderLines> 
</Order> 

예상 XML XSLT 변환 후

<?xml version="1.0" encoding="UTF-8"?> 
<Order> 
    <Instructions> 
     <Instruction InstructionType="Valid" InstructionText="See me" /> 
    </Instructions> 
    <OrderLines Type="Text" Value="9"> 
     <OrderLine Type="Fine Print" Value="3"> 

     </OrderLine> 
    </OrderLines> 
</Order> 

답변

0
<?xml version="1.0" encoding="UTF-16"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" version="1.0"> 
    <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" /> 
    <xsl:template match="/"> 
    <xsl:apply-templates select="/Order" /> 
    </xsl:template> 
    <xsl:template match="/Order"> 
    <Order> 
     <Instructions> 
     <Instruction> 
      <xsl:attribute name="InstructionType"> 
      <xsl:text>Valid</xsl:text> 
      </xsl:attribute> 
      <xsl:attribute name="InstructionText"> 
      <xsl:text>See me</xsl:text> 
      </xsl:attribute> 
     </Instruction> 
     </Instructions> 
     <OrderLines> 
     <xsl:attribute name="Type"> 
      <xsl:value-of select="OrderLines/@Type" /> 
     </xsl:attribute> 
     <xsl:attribute name="Value"> 
      <xsl:value-of select="OrderLines/@Value" /> 
     </xsl:attribute> 
     <OrderLine> 
      <xsl:attribute name="Type"> 
      <xsl:value-of select="OrderLines/OrderLine/@Type" /> 
      </xsl:attribute> 
      <xsl:attribute name="Value"> 
      <xsl:value-of select="OrderLines/OrderLine/@Value" /> 
      </xsl:attribute> 
     </OrderLine> 
     </OrderLines> 
    </Order> 
    </xsl:template> 
</xsl:stylesheet> 
+0

'Value' 속성이 입력에 없기 때문에이 방법이 효과가 없을 것이라고 생각합니다. 또한 향후 스타일 시트에 AVT를 사용하는 방법을 살펴보아야합니다. http://www.w3.org/TR/xslt#attribute-value-templates –

0

내가 다음 identity transform과 함께 시작된다 할 것입니다 overrid 필요한만큼. (이것은 일반적으로 "푸시"스타일로 지칭된다.)

예 ...

XML 입력

<Order> 
    <OrderLines Type="Text"> 
     <OrderLine Type="Fine Print"> 

     </OrderLine> 
    </OrderLines> 
</Order> 

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="Order"> 
     <xsl:copy> 
      <Instructions> 
       <Instruction InstructionType="Valid" InstructionText="See me" /> 
      </Instructions> 
      <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:template> 

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

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

</xsl:stylesheet> 

XML 출력

<Order> 
    <Instructions> 
     <Instruction InstructionType="Valid" InstructionText="See me"/> 
    </Instructions> 
    <OrderLines Value="9" Type="Text"> 
     <OrderLine Value="3" Type="Fine Print"/> 
    </OrderLines> 
</Order> 
관련 문제