将HTML转换为XML的XSLT

问题描述:

我在尝试转换以下HTML代码,但遇到了获取所需值以及使用XSLT的子字符串函数的问题。这是我想改变的HTML代码的一部分:将HTML转换为XML的XSLT

<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

请仔细阅读:[MCVE] –

好了,有了表达

<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> 

这很难不知道上下文是什么指教。我猜你想做的事:

<xsl:value-of select="substring(th[@scope='row'], 1, 4)"/> 

,在当前上下文是th元素的父节点这将工作。


需要注意的是:

<xsl:for-each select="@scope=row"> 

是无效的语法,太 - 但我不知道如何解决它没有看到你的XML是如何构成的。

+0

我试图让开始和结束标记之间的值,并使用字符串函数切片他们。但是我很难试图这样做,因为它是一个属性。 – iteong

+0

@iteong请张贴最小但完整的XML。 –

+0

刚才......没事吗? – iteong