2016-10-14 171 views
0

我在嘗試轉換以下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] –

回答

1

好了,有了表達

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

這很難不知道上下文是什麼指教。我猜你想做的事:

<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