在我的xsd文件中,我有一个简单的类型,其中包含一个枚举。
<xs:simpleType name="genreTyp">
<xs:restriction base="xs:string">
<xs:enumeration value="Sci-Fi"/>
<xs:enumeration value="Horror"/>
<xs:enumeration value="Drama"/>
<xs:enumeration value="Romance"/>
<xs:enumeration value="Comedy"/>
<xs:enumeration value="Bollywood"/>
</xs:restriction>
</xs:simpleType>
看起来像这样。
我正在使用XSLT 1.0,并且想创建一个显示这些不同值的表。如何使用XSLT 1.0访问值?
编辑:我在XSLT上还比较陌生,所以我尝试使用如下路径访问xsd文件:
<xsl:for-each select="document('xsd/attributes.xsd' )/xs:schema/xs:simpleType[@name='genreTyp']/xs:restriction/xs:enumeration">
<tr>
<td>
<xsl:value-of select="//@value"/>
</td>
</tr>
</xsl:for-each>
答案 0 :(得分:0)
您接近了-假设未显示给我们的东西(例如名称空间声明)是正确的-但xsl:value-of中以“ //”开头的内容是胡说八道。您要选择相对于上下文节点(在for-each中选择的那个),而不是相对于树的根,因此省略“ //”。
答案 1 :(得分:0)
这可以作为您的起点demo。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0">
<xsl:output method="html" indent="yes" html-version="5"/>
<xsl:template match="xs:enumeration">
<tr><td><xsl:value-of select="@value"/></td></tr>
</xsl:template>
<xsl:template match="xs:restriction">
<table><xsl:apply-templates/></table>
</xsl:template>
<!-- ignore space only text nodes -->
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:stylesheet>
导致
<!DOCTYPE HTML>
<table xmlns:xs="http://www.w3.org/2001/XMLSchema">
<tr>
<td>Sci-Fi</td>
</tr>
<tr>
<td>Horror</td>
</tr>
<tr>
<td>Drama</td>
</tr>
<tr>
<td>Romance</td>
</tr>
<tr>
<td>Comedy</td>
</tr>
<tr>
<td>Bollywood</td>
</tr>
</table>