xpath несколько условий с разными тегами

У меня проблема с проверкой XML-документа, мне нужно добраться до цели с тегами <templateId root="2.16.840.1.113883.10.20.33.4.4"/> и <entryRelationship>, должны быть выполнены оба условия, потому что, если эти два условия будут выполнены, я смогу проверить, имеет ли entryRelationship <templateId root="2.16.840.1.113883.10.20.33.4.2"/>. Я сделал это:

<rule context="//cda:entry/cda:organizer/cda:component/cda:observation[(./templateId/*[@root='2.16.840.1.113883.10.20.33.4.4']) and (./entryRelationship/*[@typeCode='REFR'])]">
   <!--<rule context='*[cda:templateId/@root="2.16.840.1.113883.10.20.33.4.4"]'>-->
   <assert test="self::cda:entryRelationship[@typeCode='REFR']">
      FAIL: CONF-QR-176: The entryRelationship, if present, SHALL contain exactly one [1..1] @typeCode="REFR" (CodeSystem: HL7ActRelationshipType 2.16.840.1.113883.5.1002).  Line: 
      <value-of select="@_line"/>
   </assert>
   <assert test="count(cda:entryRelationship/cda:observation/cda:templateId[@root='2.16.840.1.113883.10.20.33.4.2'])=1">
      FAIL: CONF-QR-177: The entryRelationship, if present,SHALL contain exactly one [1..1] Question Help Text Pattern Observation template (templateId 2.16.840.1.113883.10.20.32.4.19).  Line: 
      <value-of select="@_line"/>
   </assert>
</rule>

но не работает, мне нужна помощь, большое спасибо.

Это xml:

<component>
   <sequenceNumber value="4"/>
   <observation classCode="OBS" moodCode="EVN">
      <!--templateID for the Numeric Response Pattern-->
      <templateId root="2.16.840.1.113883.10.20.33.4.4"/>
      <languageCode></languageCode>
      <entryRelationship typeCode="REFR">
         <!--templateID for Response Media Pattern template-->
         <!--<templateId root="2.16.840.1.113883.10.20.33.4.2"/>-->
      </entryRelationship>
      <id extension="ob4" root="2.16.840.1.113883.3.1817.1.6"/>
      <code code="q4" codeSystem="Continua-Q-OID">
         <originalText>How many hours did you sleep last night?</originalText>
      </code>
      <statusCode code="COMPLETED"/>
      <value xsi:type="INT" value="7"/>
      <referenceRange typeCode="REFV">
         <!--templateID for the Response Reference Range Pattern-->
         <templateId root="2.16.840.1.113883.10.20.33.4.3"/>
         <observationRange>
            <text></text>
            <value xsi:type="IVL_INT">
               <low value="0"/>
               <high value="24"/>
            </value>
         </observationRange>
      </referenceRange>
   </observation>
</component>

person elvega    schedule 14.05.2015    source источник
comment
проверьте мой обновленный ответ. Кроме того, обновите свой вопрос вместо публикации обновлений в качестве ответа (например, ваш ответ, который был удален).   -  person har07    schedule 16.05.2015


Ответы (1)


Если я правильно понимаю вопрос, основываясь на вашем атрибуте контекста xpath для правила, вы можете попробовать этот способ (отформатированный для удобочитаемости):

//cda:entry
/cda:organizer
/cda:component
/cda:observation[
    templateId/@root='2.16.840.1.113883.10.20.33.4.4' 
        and 
    entryRelationship/@typeCode='REFR'
]

Затем, что касается xpath для «теста подтверждения», поскольку узел контекста <observation>, self::cda:entryRelationship не имеет для меня особого смысла. Попробуйте это вместо этого - или, может быть, без / в начале- :

<assert test="/cda:entryRelationship[@typeCode='REFR']">

<entryRelationship> является дочерним элементом узла контекста, а не самого узла контекста, поэтому вышеприведенное выражение имеет смысл попробовать.

person har07    schedule 14.05.2015