XSLT (XML to XML) необходим для использования вычисленного максимального значения - PullRequest
0 голосов
/ 07 июня 2018

Существует ли XSLT, который может преобразовать «XML Document 1» в «XML Document 2», как показано ниже?В «XML-документе 1» мне нужно определить значение EncounterId , где EncounterDt - максимальное значение, а затем определить, какие диагнозы имеют это значение EncounterId .Я могу сделать каждый шаг отдельно, но не могу соединить их в одном преобразовании.Возможно ли это?

Заранее спасибо.

XML-документ 1

<Data>
  <Encounters>
    <Encounter>
      <EncounterId>1234</EncounterId>
      <EncounterDt>01/01/2018</EncounterDt>
    </Encounter>
    <Encounter>
      <EncounterId>5678</EncounterId>
      <EncounterDt>01/02/2018</EncounterDt>
    </Encounter>
  </Encounters>
  <Diagnoses>
    <Diagnosis>
      <EncounterId>1234</EncounterId>
      <Code>ABCD</Code>
    </Diagnosis>
    <Diagnosis>
      <EncounterId>5678</EncounterId>
      <Code>EFGH</Code>
    </Diagnosis>
  </Diagnoses>
</Data>

Максимум EncounterDt сверху: '01 / 02/2018 'поэтому нас интересует Диагнозы с EncounterId = 5678.

XML Document 2

<Data>
  <Encounters>
    <Encounter>
      <EncounterId>5678</EncounterId>
      <EncounterDt>01/02/2018</EncounterDt>
    </Encounter>
  </Encounters>
  <Diagnoses>
    <Diagnosis>
      <EncounterId>5678</EncounterId>
      <Code>EFGH</Code>
    </Diagnosis>
  </Diagnoses>
</Data>

1 Ответ

0 голосов
/ 07 июня 2018

Начните с того, что переменная, содержащая EncounterId из максимального EncounterDt в виде:

<xsl:variable name="kMaxEncounter">
    <xsl:for-each select="/Data/Encounters/Encounter">
        <!-- sorting the values by descending order
             to get the max value in the first position -->
        <xsl:sort select="EncounterDt" data-type="text" order="descending"/>
        <!-- get the value of the EncounterId -->
        <xsl:if test="position()=1">
            <xsl:value-of select="EncounterId"/>
        </xsl:if>
    </xsl:for-each>
</xsl:variable>

, должна иметь шаблоны бездействующих, которые не соответствуют $ kMaxEncounter

<xsl:template match="Encounter[EncounterId!=$kMaxEncounter]|
    Diagnosis[EncounterId!=$kMaxEncounter]"/>

и шаблон удостоверения личности:

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

См. Это в действии (http://xsltfiddle.liberty -development.net / bFDb2Ca ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...