XSLT转换问题 - 如何填充属性

时间:2010-01-11 12:02:04

标签: xslt attributes

我第一次使用xslt。我必须根据某些标准创建一个元素。

这里是i / p xml:

<FirstUser>
   <User id="2" description="ABC" Type="HR"/>
</FirstUser>
<SecondUser>
  <User id="3" description="ABC" Type="HR"/>
  <User id="4" description="xyz" Type="Admin"/>
  <User id="5" description="LMN" Type="Payroll"/>
</SecondUser>

最终的O / P

<AllUsers isFromHR='true'>
  <User id="2" description="ABC" Type="HR"/>
  <User id="3" description="ABC" Type="HR"/>
  <User id="4" description="xyz" Type="Admin"/>
  <User id="5" description="LMN" Type="Payroll"/>
</AllUsers>

业务规则:AllUsers元素有1个属性isFromHR - 如果<FirstUser><SecondUser>的类型属性中的值为true,则其值为true 是HR,否则它将是假的

如何填充isFromHR的值?其余的xml创建我已经完成了。

提前致谢。

4 个答案:

答案 0 :(得分:2)

怎么样?
<AllUsers isFromHR="{ count((//FirstUser | //SecondUser)[@type='HR']) &gt; 0 }">

<AllUsers>
    <xsl:attribute 
         name="isFromHR"
         value="count((//FirstUser | //SecondUser)[@type='HR']) &gt; 0" />

答案 1 :(得分:0)

  <xsl:template match="/">
    <AllUsers>
      <xsl:attribute name="isFromHR">
        <xsl:choose>
            <xsl:when test="//*[local-name(.)='FirstUser' or local-name(.)='SecondUser']/*/@Type[.='HR']">true</xsl:when>
        <xsl:otherwise>false</xsl:otherwise>
      </xsl:choose>
        </xsl:attribute>
      <xsl:apply-templates />
    </AllUsers >
  </xsl:template>

答案 2 :(得分:0)

<AllUsers isFromHR="{descendant::@type = 'HR'}">

答案 3 :(得分:0)

输入XML缺少元素:

<FirstUser>
   <User id="2" description="ABC" Type="HqR"/>
</FirstUser>
<SecondUser>
  <User id="3" description="ABC" Type="H2R"/>
  <User id="4" description="xyz" Type="Admin"/>
  <User id="5" description="LMN" Type="Payroll"/>
</SecondUser>

无论如何,我会选择:

<AllUsers isFromHR="{//FirstUser/User/@Type = 'HR' or //SecondUser/User/@Type = 'HR'}">

如果FirstUser或SecondUser包含“HR”类型的用户,则会显示“true”。