如何使用xslt中的变量将键与不同的值匹配?

时间:2017-09-17 18:06:58

标签: xml xslt

我的代码的一般目的是生成一个html文档,显示我的xml文档中的一些信息。 我想根据他们的身份得到医生的名字。 这是我的xml文档的样子:

    <hospital>
        <doctors>
            <doctor>
                <name>john</name>
                <id>1</id>
                ...
            </doctor>
            <doctor>
                <name>steve</name>
                <id>2</id>
                ...
           </doctor>
        </doctors>
        <records>
           <record>
              <doctor id="1" />
              <date>...</date>
              <patient>
              ...
              </patient>
           </record>
        </records>
    </hospital>

这是我的xslt代码:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:key name="ids" match="doctor" use="id" />

      <xsl:template match="/">
        ...
        <xsl:apply-templates select="hospital/records/record"/>
        ...
      </xsl:template>

      <xsl:template match="record">
        ...
        Doctor identification : <xsl:value-of select="doctor/@id" />
        <xsl:variable name="docId" select="/doctor/@id" />
        <xsl:value-of select="key('ids',$docId)/hospital/doctors/doctor/name"/>
        ...
      </xsl:template>
   </xsl:stylesheet> 

在我的HTML中,我可以阅读:

&#34;医生鉴定:医生的身份&#34;

我希望能够得到:

&#34;医生鉴定:医生的医生姓名&#34;

所以我花了几个小时试图找出为什么我的xslt代码不起作用。 这是一项任务,我必须使用xpath&#34; hospital / records / record&#34;。 我希望我的问题很清楚。 谢谢你的帮助!!!

1 个答案:

答案 0 :(得分:1)

首先,改变一下:

<xsl:variable name="docId" select="/doctor/@id" />

为:

<xsl:variable name="docId" select="doctor/@id" />

然后改变这个:

<xsl:value-of select="key('ids',$docId)/hospital/doctors/doctor/name"/>

为:

<xsl:value-of select="key('ids', $docId)/name"/>

希望这些变化不言自明。请注意,变量不是必需的:您可以简单地执行:

<xsl:value-of select="key('ids', doctor/@id)/name"/>