2016-10-14 3 views
0

Я пытаюсь преобразовать следующий HTML-код, но имею проблемы с получением необходимых значений и использованием подстрочной функции для XSLT. Это является частью HTML-кода, который я пытаюсь преобразовать:XSLT для преобразования HTML в XML

<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

Смежные вопросы