XSL如何显示同一字段的所有属性



我有以下字段(f28),并希望显示有数据的所有结果。因为已经有模板显示值,也没有显示值= null

我的xsl。对于每个字段

 <xsl:template match="f28">
    <xsl:choose>
       <xsl:when test="ROW/@f1 !='NULL'">
        <xsl:element name="hasTestDegree" namespace="{namespace-uri()}#">
        <xsl:value-of select='ROW/@f1'/>
        </xsl:element>
       </xsl:when>
    </xsl:choose>
 </xsl:template>

我的XML:

<f28>
 <ROW f1='FULL' f2='NULL' f3='NULL' f4='NULL' f5='not certain' f6='BRCA1' f7='NULL'/>
 <ROW f1='FULL' f2='NULL' f3='NULL' f4='NULL' f5='no mutation' f6='BRCA2' f7='NULL'/> 
 <ROW f1='FULL' f2='NULL' f3='NULL' f4='NULL' f5='NULL' f6='p53' f7='NULL'/>
</f28>

我想要的结果如下:

  <hasTestDegree>FULL</hasTestDegree>
  <hasTestResult>not certain</hasTestResult>
  <hasTestType>BRCA1</hasTestType>`
  <hasTestDegree>FULL</hasTestDegree>
  <hasTestResult>no mutation</hasTestResult>
  <hasTestType>BRCA2</hasTestType>`
  <hasTestDegree>FULL</hasTestDegree>
  <hasTestType>p53</hasTestType>`
  1. 创建匹配属性的模板
  2. 为属性应用模板

像这样:

<xsl:template match="f28">
  <xsl:apply-templates select="ROW" />
</xsl:template>
<xsl:template match="ROW">
  <xsl:apply-templates select="@*">
    <xsl:sort select="name()" />
  </xsl:apply-templates>
</xsl:template>
<!-- @f1 becomes <hasTestDegree> -->
<xsl:template match="f28//@f1">
  <hasTestDegree>
    <xsl:value-of select="." />
  </hasTestDegree>
</xsl:template>
<!-- add more templates for the other attributes... -->
<!-- any attribute with a value of 'NULL' is not output -->
<xsl:template match="@*[. = 'NULL']" />

  • 在您的情况下似乎没有必要使用<xsl:element>,只需写出您想要创建的元素。
  • 我的解决方案依赖于匹配特异性。对于属于'NULL'的属性,匹配表达式@*[. = 'NULL']将覆盖f28//@f1
  • 中间步骤(<xsl:apply-templates select="ROW" />)是必要的,以确保一切都按照正确的顺序处理。
  • 如果您想手动确定输出顺序,您可以在<xsl:apply-templates>中使用<xsl:sort>或连续多次使用<xsl:apply-templates>

相关内容

  • 没有找到相关文章

最新更新