我有以下XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/TR/REC-html40"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="ss:Workbook/o:DocumentProperties/o:*"/>
<xsl:template match="ss:Workbook/x:ExcelWorkbook/x:*"/>
<xsl:template match="ss:Workbook/x:ExcelWorkbook/x:*"/>
<xsl:template match="ss:Workbook/ss:Worksheet/x:WorksheetOptions/x:*"/>
<xsl:template match="ss:Workbook/ss:DocumentProperties/ss:*"/>
<xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'>
<grade-dist>
<xsl:apply-templates select='ss:Workbook/ss:Worksheet/ss:Table'/>
</grade-dist>
</xsl:template>
<xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'>
....
Run Code Online (Sandbox Code Playgroud)
我的XML输出正常,但我没有:<grade-dist>并且</grade-dist>
在其中,似乎它完全忽略了两个,任何想法为什么?
谢谢,
您有两个模板具有完全相同的匹配模式: 'ss:Workbook/ss:Worksheet/ss:Table'
根据XSLT规范,这是一个可恢复的错误,这里观察到的恢复是最后一个模板被选中.
另一个观察是指令:
<xsl:apply-templates select='ss:Workbook/ss:Worksheet/ss:Table'/>
Run Code Online (Sandbox Code Playgroud)
在模板匹配中'ss:Workbook/ss:Worksheet/ss:Table',很可能是错误的 - 不太可能存在'ss:Workbook/ss:Worksheet/ss:Table'具有'ss:Workbook/ss:Worksheet/ss:Table'祖父母的元素.
我想你想要的是这样的:
<xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'>
<grade-dist>
<xsl:apply-templates select="." mode="pr2"/>
</grade-dist>
</xsl:template>
<xsl:template mode="pr2" match='ss:Workbook/ss:Worksheet/ss:Table'>
<!-- Some necessary processing -->
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
或者只是:
<xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'>
<grade-dist>
<!-- Do the processing here -->
</grade-dist>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |