2009-07-24 63 views
1
<ClinicalDocument> 
    <entry> 
    <substaceAdministration> 
     <effectiveTime></effectiveTime> 
    </substaceAdministration> 
    </entry> 
    <entry> 
    <substaceAdministration> 
     <effectiveTime></effectiveTime> 
    </substaceAdministration> 
    </entry> 
    <entry> 
    <substaceAdministration> 
    </substaceAdministration> 
    </entry> 
</ClinicalDocument> 

我必須爲每個條目斷言/ substaceAdministration is effectiveTime元素是否存在。如何爲每個孩子斷言一個元素是否存在

我試圖與這個表達式

<xsl:when test="count(ClinicalDocument/entry/substanceAdministration/effectiveTime)=1"/> 

我找諮詢如何改變我的XPath表達式來滿足這一要求。

回答

1

,而不是試圖算子元素的所有實例,也許你應該指望所有實例沒有子元素(約格式化爲這一個遺憾,它的長):

<xsl:when 
test="count(ClinicalDocument/entry/substanceAdministration[not(effectiveTime)]) 
     = 0"> 
    <!-- True when all substanceAdministration elements 
     have an effectiveTime child 
    --> 
</xsl:when> 

你也可以做這種檢查在每個substanceAdministration基礎在任何一個for-each循環,或使用像這樣的模板:

<!-- Assuming the current node is substanceAdministration --> 
<xsl:if test="count(effectiveTime) = 1"> 
    <!-- True when there is one and only one effectiveTime child --> 
</xsl:if> 
0

你的陳述

test="count(ClinicalDocument/entry/substanceAdministration/effectiveTime)=1" 

只有在有且僅有一個< effectiveTime>元素時纔會返回true。

這將是更容易理解你想要做的更多的xsl:模板來看待。什麼是你的上下文節點?你是否正在處理每個<入口>有一個<有效時間>後代?如果是這樣,您可以使用模板:

<xsl:template match="entry[descendant::effectiveTime]">...</xsl:template>