2016-10-14 16 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

、しかし、手始めにこれを試してみてください。

  <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要素の親ノードである場合、これは動作します。しかし、私はあなたのXMLが構成されている方法を見ずにそれを修正する方法がわからない -

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

があまりにも、無効な構文です:こと


注意。表現

<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 

を得ている、私は願って、かなり明白だとまあ

+0

私は開始タグと終了タグの間の値を取得しようと、SUBSTRING関数を使用してそれらをスライスしています。しかし、それが属性なので、それをやろうとするのは難しいです。 – iteong

+0

@iteong最小限の完全なXMLも投稿してください。 –

+0

ちょっと...大丈夫ですか? – iteong

関連する問題