我正在尝试转换以下HTML代码,但是在获取所需的值和使用XSLT的子字符串函数时遇到问题。这是我正在尝试转换的HTML代码的一部分:
<th scope="row">2005DEC</th>
<td>2,757</td>
以下XML代码:
<?xml version="1.0"?>
<Original>
<Entry>
<Year>2005</Year>
<Month>DEC</Month>
<Age>
<Group>
<value>90</value>
</Group>
</Age>
</Entry>
</Original>
我正在尝试运行XSLT查询,但它一直出错。我的XSLT是:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<Original>
<xsl:for-each select="@scope=row">
<Entry>
<Year>
<xsl:value-of select="substring(@scope=row, 1, 4)"/>
</Year>
<Month>
<xsl:value-of select="substring(@scope=row, 5, 3)"/>
</Month>
<Age>
<Group>
<value>
<xsl:value-of select="td[1]"/>
</value>
</Group>
</Age>
</Entry>
</xsl:for-each>
</Original>
</xsl:template>
</xsl:stylesheet>
错误是:
Ivans-MacBook-Pro:xslt-test ivanteong$ java -jar saxon9he.jar table823.html table823.xslt > out.xml
Error at xsl:value-of on line 13 column 73 of table823.xslt:
XPTY0004: Required item type of first argument of substring() is xs:string; supplied value
has item type xs:boolean
Error at xsl:value-of on line 16 column 73 of table823.xslt:
XPTY0004: Required item type of first argument of substring() is xs:string; supplied value
has item type xs:boolean
Failed to compile stylesheet. 2 errors detected.
答案 0 :(得分:2)
好吧,用表达式
<xsl:value-of select="substring(@scope=row, 5, 3)"/>
很明显,我希望,为什么你会收到错误信息
Required item type of first argument of substring() is xs:string; supplied value has item type xs:boolean
我们不知道您的完整输入树是什么,但请为初学者尝试:
<Group>
<value>
<xsl:value-of select="following-sibling::td[1]"/>
</value>
</Group>
</Age>
</Entry>
</xsl:for-each>
</Original>
</xsl:template>
答案 1 :(得分:1)
如果不知道上下文是什么,很难提供建议。我猜你想做:
<xsl:value-of select="substring(th[@scope='row'], 1, 4)"/>
如果当前上下文是th
元素的父节点,则此方法将起作用。
请注意:
<xsl:for-each select="@scope=row">
也是无效的语法 - 但我不知道如何修复它而不了解XML的结构。