xpath中的XSLT计数器

时间:2019-05-14 20:33:00

标签: xslt

我需要用Container / Patient / Races / Race [number] / Code中的值填充XML属性“ code”。我无法使用该值填充该属性。请参阅下面的XML和XSLT。

我已尝试使用https://www.freeformatter.com/xsl-transformer.html

进行各种场景测试
    <?xml version="1.0" encoding="UTF-8"?>
    <Container>
      <Patient>
        <Races>
          <Race>
            <Code>2106-3</Code>
          </Race>
          <Race>
            <Code>2106-9</Code>
          </Race>
        </Races>
     </Patient>
    </Container>


    <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sdtc="urn:hl7-org:sdtc">
      <xsl:template match="/">
        <raceCode code="{Container/Patient/Races/Race[1]/Code}" />
          <xsl:for-each select="Container/Patient/Races/Race[position()>1]">
          <xsl:variable name="pos" select="position()"/>
          <sdtc:raceCode code="{Container/Patient/Races/Race[$pos]/Code}" />
      </xsl:for-each>
      </xsl:template>
    </xsl:stylesheet>

这是输出:

     <raceCode xmlns:sdtc="urn:hl7-org:sdtc" code="2106-3"/>
     <sdtc:raceCode xmlns:sdtc="urn:hl7-org:sdtc" code=""/>

但是我想要以下内容:

    <raceCode xmlns:sdtc="urn:hl7-org:sdtc" code="2106-3"/>
    <sdtc:raceCode xmlns:sdtc="urn:hl7-org:sdtc" code="2106-9"/>

1 个答案:

答案 0 :(得分:1)

当您这样做:

 <xsl:for-each select="Container/Patient/Races/Race[position()>1]">

您被置于Race的上下文中。在这种情况下,表达式:

Container/Patient/Races/Race[$pos]/Code

不选择任何内容。如果您进行了更改,将会得到不同的结果:

<sdtc:raceCode code="{Container/Patient/Races/Race[$pos]/Code}" />

使用绝对路径:

<sdtc:raceCode code="{/Container/Patient/Races/Race[position()>1][$pos]/Code}" />

但实际上您可以简单地做到:

<sdtc:raceCode code="{Code}" />

并处理该变量。