我正在使用xsl 1.0 我想将每个参数的相应值作为下面的xml。 下面的注释我第二个参数的当前结果是第一个重复的值。 使用该功能只选择不找到value ='null'
我的xml:
<INDIVIDUO param='1' >
<DATA>
<f16>
<ROW f1='Breast' f2='63'/>
</f16>
</INDIVIDUO>
<INDIVIDUO param='2' >
<DATA>
<f16>
<ROW f1='Beddle' f2='40'/>
</f16>
</INDIVIDUO>
我的xsl代码:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdf="http://xxx#" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<!-- Begin RDF document -->
<xsl:template match="/">
<xsl:element name="rdf:RDF">
<rdf:Description rdf:about="http://xxx">
<xsl:apply-templates/>
</rdf:Description>
</xsl:element>
</xsl:template>
<xsl:template match="f16">
<xsl:choose>
<xsl:when test="/INDIVIDUO/DATA/f16/ROW/@f1 !='NULL'">
<xsl:element name="hasNameCancer" namespace="{namespace-uri()}#">
<xsl:value-of select="/INDIVIDUO/DATA/f16/ROW/@f1" />
</xsl:element>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="/INDIVIDUO/DATA/f16/ROW/@f2 !='NULL'">
<xsl:element name="idadediag" namespace="{namespace-uri()}#">
<xsl:value-of select="/INDIVIDUO/DATA/f16/ROW/@f2" />
</xsl:element>
</xsl:when>
</xsl:choose>
我的实际结果:
<individuo_1>
<hasNameCancer>Breast</hasNameCancer>
<idadediag>63</idadediag>
</individuo_1>
<individuo_2>
<hasNameCancer>Breast</hasNameCancer>
<idadediag>63</idadediag>
</individuo_2>
我希望结果如下:
<individuo_1>
<hasNameCancer>Breast</hasNameCancer>
<idadediag>63</idadediag>
</individuo_1>
<individuo_2>
<hasNameCancer>Beddle</hasNameCancer>
<idadediag>40</idadediag>
</individuo_2>
答案 0 :(得分:0)
您可能会得到相同的结果,因为您没有在f16
的上下文中选择行。您总是获得第一个元素,因为您实际上是在选择所有行的集合。由于您的上下文为f16
,因此您可以使用相对表达式选择后代节点。
要在上下文中选择元素,请在test
和select
中使用 relative XPath表达式:
<xsl:template match="f16">
<xsl:choose>
<xsl:when test="ROW/@f1">
<xsl:element name="hasNameCancer" namespace="{namespace-uri()}#">
<xsl:value-of select="ROW/@f1" />
</xsl:element>
</xsl:when>
</xsl:choose>
...