我需要对不同的值进行排序,但我无法使其正常运行。
我的示例XML:
<?xml-stylesheet type="text/xsl" href="7.xsl"?>
<immobles>
<ofertes>
<oferta estat="1">Venda</oferta>
<oferta estat="2">Lloguer</oferta>
</ofertes>
<categories>
<categoria cat="A">Pis</categoria>
<categoria cat="B">Casa</categoria>
<categoria cat="C">Duplex</categoria>
</categories>
<propietaris>
<propietari dni="400001">Fernando</propietari>
<propietari dni="400004">Berta</propietari>
<propietari dni="400002">Judit</propietari>
<propietari dni="400007">Manel</propietari>
<propietari dni="400003">Pilar</propietari>
<propietari dni="400005">Jordi</propietari>
</propietaris>
<immobiliaries>
<immobiliaria codi="I1">Home sweet home</immobiliaria>
<immobiliaria codi="I2">Com a casa enlloc</immobiliaria>
<immobiliaria codi="I3">Llar de foc</immobiliaria>
<immobiliaria codi="I4">Pisos penyasegat</immobiliaria>
</immobiliaries>
<propietats>
<propietat id="1" oferta="1" propietari="400003">
<nom>Pis a l'eixample</nom>
<categoria cat="A"/>
<valorat>145000</valorat>
<preu>520</preu>
<companyies>
<companyia comp="I3" />
<companyia comp="I4" />
</companyies>
</propietat>
<propietat id="2" oferta="2" propietari="400001">
<nom>Casa moderna 4 habitacions</nom>
<categoria cat="B"/>
<valorat>358000</valorat>
<preu>350000</preu>
<companyies>
<companyia comp="I2" />
<companyia comp="I3" />
</companyies>
</propietat>
<propietat id="3" oferta="2" propietari="400002">
<nom>Duplex emmoblat lluminós</nom>
<categoria cat="C"/>
<valorat>210000</valorat>
<preu>150000</preu>
<companyies>
<companyia comp="I1" />
</companyies>
</propietat>
<propietat id="3" oferta="1" propietari="400005">
<nom>Duplex centre</nom>
<categoria cat="C"/>
<valorat>160000</valorat>
<preu>340</preu>
<companyies>
<companyia comp="I4" />
<companyia comp="I1" />
</companyies>
</propietat>
</propietats>
</immobles>
我的XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr bgcolor="#9acd32">
<th>Propietat en lloguer</th>
</tr>
<xsl:for-each select="//propietat">
<xsl:variable name="idofer" select="@oferta" />
<xsl:variable name="idcat" select="categoria/@cat" />
<xsl:variable name="idpropi" select="@propietari" />
<xsl:variable name="propiofer" select="//ofertes/oferta[@estat=$idofer]" />
<xsl:variable name="propicat" select="//categories/categoria[@cat=$idcat]" />
<xsl:variable name="propipropieari" select="//propietaris/propietari[@dni=$idpropi]" />
<tr>
<xsl:choose>
<xsl:when test="$propiofer='Lloguer'">
<xsl:apply-templates select="nom">
<xsl:sort select="preu" order="ascending" />
<xsl:sort select="$propicat" order="descending" />
<xsl:sort select="$propipropietari" order="descending" />
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我需要显示“Lloguer”ofertes/oferta
中的值,并为preu
,categories/categoria
和propietaris/propietari
排序。
我不确定是否需要使用apply-template或者我是否可以通过其他方式制作
答案 0 :(得分:0)
首先,请考虑使用密钥查找oferta
元素。
<xsl:key name="ofertes" match="oferta" use="@estat" />
然后,要仅选择propietat
“Lloguer”的oferta
,您可以执行此操作....
<xsl:for-each select="//propietat[key('ofertes', @oferta)='Lloguer']">
您也可以使用排序中的键。因此,要按categoria
值排序,您可以定义一个类似
<xsl:key name="categories" match="categoria" use="@cat" />
然后,你可以像这样排序......
<xsl:for-each select="//propietat[key('ofertes', @oferta)='Lloguer']">
<xsl:sort select="preu" order="ascending" />
<xsl:sort select="key('categories', categoria/@cat)" order="descending" />
为初学者尝试这个XSLT ......
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="ofertes" match="oferta" use="@estat" />
<xsl:key name="categories" match="categoria" use="@cat" />
<xsl:key name="propietaris" match="propietari" use="@dni" />
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr bgcolor="#9acd32">
<th>Propietat en lloguer</th>
</tr>
<xsl:for-each select="//propietat[key('ofertes', @oferta)='Lloguer']">
<xsl:sort select="preu" order="ascending" />
<xsl:sort select="key('categories', categoria/@cat)" order="descending" />
<xsl:sort select="key('propietaris', @propietari)" order="descending" />
<tr>
<td><xsl:value-of select="nom" /></td>
<td><xsl:value-of select="key('categories', categoria/@cat)" /></td>
<td><xsl:value-of select="key('propietaris', @propietari)" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>