ฉันมีไฟล์ XML (เอกสารประกอบการบริการบางอย่าง) มีลักษณะดังนี้:
<?xml version="1.0" encoding="UTF-8"?>
<apis>
<api min="2.2" max="3.0">
<resource name="products">
<description>products from 2.2 to 3.0</description>
</resource>
<resource name="brands">
<description>brands from 2.2 to 3.0</description>
</resource>
</api>
<api min="1.0" max="2.2">
<resource name="products">
<description>products from 1.0 to 2.2</description>
</resource>
</api>
<api min="2.1" max="2.2">
<resource name="brands">
<description>brands from 2.1 to 2.2</description>
</resource>
</api>
<api min="1.0" max="2.1">
<resource name="brands">
<description>brands from 1.0 to 2.1</description>
</resource>
</api>
</apis>
และเมื่อฉันต้องการใช้คำอธิบายทรัพยากรทั้งสองในเวอร์ชัน API เช่น 2.1 โดยใช้ groovy และ XmlParser ฉันสามารถทำได้โดย:
def rawXml = new XmlParser().parse ( 'file.xml' )
rawXml.api.findAll {
node -> node.@min <= '2.1' && node.@max > '2.1'
}.resource.description
ตอนนี้ฉันต้องการทำสิ่งนี้ แต่เป็นไฟล์ HTML โดยใช้ XSLT ฉันลอง:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="apis">
<html>
<body>
<table>
<tr>
<th>Resource name</th>
<th>Resource description</th>
</tr>
<xsl:for-each select="api[@min<='2.1'] and api[@max>'2.1']">
<xsl:for-each select="resource">
<tr>
<td>
<xsl:value-of select="@name"/>
</td>
<td>
<xsl:value-of select="description"/>
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
แต่มันไม่ทำงาน ฉันสังเกตเห็นว่าปัญหาเกิดขึ้นกับตัวดำเนินการ '‹=', '>' และ 'และ' ฉันเปลี่ยนไป
'api[@min<='2.1'] and api[@max>'2.1']'
to
'api[@min<='2.1']'
or to
api[@max>'2.1']
และมันก็ได้ผล แต่
'api[@min<='2.1'] and api[@max>'2.1']'
ไม่. http://www.w3schools.com/xsl/xpath_operators.asp บอกว่าควร สำหรับ xpath แต่ xsl select มีปัญหากับมันเหรอ?