2011-09-08 5 views
-1

다음과 같은 블록이 있습니다.xsl을 사용하여 기존 xml portin에 블록을 추가해야합니다.

<items> 
<item> 
<itemName>Pen</itemName> 
<cost>200</cost> 
</item> 
<item> 
<itemName>Book</itemName> 
<cost>100</cost> 
</item> 
<item> 
<itemName>Bag</itemName> 
<cost>250</cost 
</item> 
</items> 

나는 위의 블록을 통해 갈 필요가 내가 이름을 연필로 항목을 발견하지 않은 경우 다음 나는 다음과 같이 연필을 추가해야합니다.

<item> 
<itemName>Pencil</itemName> 
<cost>20</cost> 
</item> 

몇 가지 지침을 제공해주십시오. 로직이 다음 시나리오를 처리해야합니다.

<items> 
<item/> 
</items> 

위의 시나리오에서 출력은 다음과 같아야합니다.

<items> 
<item> 
<itemName>Pencil</itemName> 
<cost>20</cost> 
</item> 
</items> 

답변

2

이것은 필요한 상황에 맞는 몇 가지 추가 템플릿을 사용하여 ID 변환을 통해 얻을 수 있습니다.

항목에게 연필 항목을 포함하지 않는 요소를 일치 시키려면, 당신은 너무

<xsl:template match="item[not(node())]" /> 
처럼, 빈 항목 요소를 무시 또한 다음

<xsl:template match="items[not(item[itemName='Pencil'])]"> 

를, 당신이 필요로 사용할 수 있습니다

이 모두를 넣으면 다음 XSLT가 부여됩니다.

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

    <xsl:template match="items[not(item[itemName='Pencil'])]"> 
     <xsl:copy> 
     <item> 
      <itemName>Pencil</itemName> 
      <cost>20</cost> 
     </item> 
     <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="item[not(node())]" /> 

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

하여 입력 XML인가 출력은 다음과 같다 :

<items> 
    <item> 
     <itemName>Pencil</itemName> 
     <cost>20</cost> 
    </item> 
    <item> 
     <itemName>Pen</itemName> 
     <cost>200</cost> 
    </item> 
    <item> 
     <itemName>Book</itemName> 
     <cost>100</cost> 
    </item> 
    <item> 
     <itemName>Bag</itemName> 
     <cost>250</cost> 
    </item> 
</items> 

을 추가적으로 다음과 같이 입력 될 때

<items> 
    <item/> 
</items> 

다음과 같이 출력 될 것이다

<items> 
    <item> 
    <itemName>Pencil</itemName> 
    <cost>20</cost> 
    </item> 
</items> 
+0

+1 좋은 답변입니다. –

관련 문제