2015-09-16 77 views
0

根據出的要求,我們需要包裝由逗號分隔para的內容。我們能夠做到這一點。 但不應考慮thiru標籤的逗號,它必須附加到以前的標籤或下一個標籤。 如果只有para是在之前和之後,那麼它應該被附加兩者。Unwarp標籤,並把逗號之間期望單標籤

見下面的例子:

輸入4:

<Para>Apple1 
    <Thiru>Mango1<Ref>Grape1</Ref><Ref>Grape2</Ref><Ref>Grape3</Ref>Mango2</Thiru>Apple2 
</Para> 

輸出4:

<Para>Apple1Mango1,Grape1,Grape2,Grape3Mango2,Apple2</Para> 

當前的xsl:

<xsl:copy-of select="$Cells/Para/@*" /> 
<xsl:for-each select="$Cells/Para/node()[self::text() or self::Ref or self::Thiru][normalize-space(.)!='']"> 
<xsl:value-of select="normalize-space(.)" /> 
<xsl:if test="position()!=last()" > 
<xsl:value-of select="','" /> 
</xsl:if> 
</xsl:for-each> 

通過使用我們正在當前的XSL,對所有元素我的要求是我們不應該考慮標籤蒂魯。

請驗證示例輸入和輸出。在當前輸入和預期的輸出

+0

測試案例4似乎矛盾測試用例1.在測試情況1中,一逗號是*不在'Thiru'的內容和最後一個字符串之間輸出,但在測試案例4中,*輸出*。請解決這個矛盾。 –

+0

Hi @ SeanB.Durkin,Thansk爲您的迴應。實際上,這就是要求。如果para只有thiru,那麼預計第一個輸出。如果Ref在Thieu的前面和後面出現,那麼值應該應用於裁判並且應該使用逗號。即我們根本不考慮蒂魯。 – ThirumalMarugan

+0

'1234'在測試用例3中來自哪裏?它甚至沒有輸入。 –

回答

2

看,我假設以下規則

  1. 不要將逗號第一個文本元素
  2. 前的文本元素,其前不要加逗號父母是Thiru

在這種情況下,試試這個樣式表(注意我已經顛倒了邏輯,所以它實際上是檢查是否逗號應放置,而不是不放置)

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

    <xsl:template match="Para"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <xsl:for-each select=".//text()"> 
       <xsl:if test="position() > 1 and not(parent::Thiru)">,</xsl:if> 
       <xsl:value-of select="normalize-space()" /> 
      </xsl:for-each> 
     </xsl:copy> 
    </xsl:template> 

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

當這個被施加到以下輸入:

<Para>Apple1 
    <Thiru>Mango1<Ref>Grape1</Ref><Ref>Grape2</Ref><Ref>Grape3</Ref>Mango2</Thiru>Apple2 
</Para> 

以下是輸出

<Para>Apple1Mango1,Grape1,Grape2,Grape3Mango2,Apple2</Para> 
+0

謝謝你的回答。它工作正常。我會把我的全部要求放在單獨的帖子和答案上。 – ThirumalMarugan