2017-03-08 120 views
0

我正在嘗試檢查子節點的值,並僅在它的值不是-1時纔將其包含在轉換後的XML中。以下是輸入xml的示例。XSLT - 如果節點包含無效數據,則排除節點

<root> 
    <a>-1</a> 
    <b>valid</b> 
    <c>valid</c> 
    <d>valid</d> 
</root> 

而XSLT的相關部分:

<xsl:choose> 
    <xsl:when test="/a != -1"> 
      <xsl:value-of select="*"></xsl:value-of>  
    </xsl:when> 
    <xsl:otherwise> 
      <xsl:value-of select="*[not(a)]"></xsl:value-of> 
    </xsl:otherwise> 
</xsl:choose> 

元件B至c被允許具有-1值,所以我需要專門檢查該值的<a>元件,並且僅它應該被排除。目前我在選擇塊中執行-1檢查,並嘗試使用<xsl:value-of select="*[not(a)]"></xsl:value-of>排除它。任何幫助表示讚賞。

+0

什麼是「年」? –

+0

對不起,它應該沒有(一)。我做了編輯。 –

回答

1

如果使用使用xsl:apply-templates標準的遞歸下降的處理模式,那麼你只需要一個什麼都不做規則

<xsl:template match="a[.=-1]"/> 

排除這些因素。

如果您使用其他處理模式,則需要向我們顯示您的代碼。

+0

感謝您的回覆@Michael。我編輯了問題以包含我的XSLT部分。該部分位於另一個不允許作爲子項的元素中。任何其他想法如何我可以實現這一點? –

+0

恐怕你的XSLT片段看起來對我來說都是錯誤的。我無法看到它作爲一個整體適合樣式表的位置,但邏輯對我來說毫無意義。在XSLT中解決這個問題的正確方法是編寫一個匹配所有內容並以遞歸方式複製的身份模板規則,然後爲需要不同行爲的元素(例如我的答案中的元素)提供進一步的模板規則。 –

相關問題