如何为每个孩子断言一个元素是否存在

时间:2009-07-24 16:38:25

标签: xml xpath xslt

<ClinicalDocument>
  <entry>
     <substaceAdministration>
        <effectiveTime></effectiveTime>
     </substaceAdministration>
  </entry>
  <entry>
     <substaceAdministration>
        <effectiveTime></effectiveTime>
     </substaceAdministration>
  </entry>
  <entry>
     <substaceAdministration>
     </substaceAdministration>
  </entry>
</ClinicalDocument>

我必须断言每个条目/ substaceAdministration有效时间元素是否存在。

我尝试过这个表达式

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

我正在寻找有关如何更改XPath表达式以满足此要求的建议。

2 个答案:

答案 0 :(得分:1)

不是试图计算子元素的所有实例,也许你应该计算所有没有子元素的实例(对不起这个格式很抱歉;它很长):

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

您还可以使用以下内容在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>

答案 1 :(得分:0)

您的陈述

test="count(ClinicalDocument/entry/substanceAdministration/effectiveTime)=1"
如果只有一个&lt; effectiveTime&gt;,

将仅返回true。元件。

要了解您正在尝试使用更多xsl:模板来查看内容会更容易。你的上下文节点是什么?你是否想要处理每个&lt; entry&gt;有一个&lt; effectiveTime&gt;后裔?如果是这样,您可以使用模板:

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