2016-05-09 15 views
2

xsltを初めて使用しています。xmlデータを要素名やデータを表の列としてHTML形式に変換する必要がありますが、テキストで表示する作業コードはありますが、 HTMLテーブル形式は、現在、このような出力を得るXMLとXSLTxsltを使用してテーブル形式でxmlからhtmlへ

を見つけてください、私はこの

A_Bテキスト
A_Cテキスト
A_D_D1 =テキスト
A_D_D2_D3テキスト
A_D_D2_D4テキスト
を得ることができる方法を提案して下さい A_E_E1_E2_E3 =

が、私は同じことがHTMLの表形式で表示する必要がテキスト

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="recur.xsl"?> 
<A> 
    <B>Text</B> 
    <C>Text</C> 
    <D> 
     <D1>Text</D1> 
     <D2> 
      <D3>Text</D3> 
      <D4>Text</D4> 
     </D2> 
    </D> 
    <E> 
     <E1> 
      <E2> 
       <E3>Text</E3> 
      </E2> 
     </E1> 
    </E> 
</A> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" encoding="UTF-8"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="*[text()]"> 
    <xsl:for-each select="ancestor-or-self::*"> 
     <xsl:value-of select="name()" /> 
     <xsl:if test="position()!=last()"> 
      <xsl:text>_</xsl:text> 
     </xsl:if> 
    </xsl:for-each> 
    <xsl:text> </xsl:text> 
    <xsl:value-of select="." /> 
    <xsl:text>&#10;</xsl:text> 
    <xsl:apply-templates select="*"/> 
</xsl:template> 
</xsl:stylesheet> 

の予想される出力は、この

<html> 
 
</head> 
 
<body> 
 
<table border="1"> 
 
<tr><td>A_B</td> <td> Text </td> 
 
<tr><td>A_C</td> <td> Text </td> 
 
<tr><td>A_D_D1</td> <td> Text </td> 
 
<tr><td>A_D_D2_D3</td> <td> Text </td> 
 
<tr><td>A_D_D2_D4</td> <td> Text </td> 
 
<tr><td>A_E_E1_E2_E3</td> <td> Text </td> 
 
</table> 
 
</body> 
 
</html>

のようなものです
+0

がコードとしてあなたの期待出力を投稿してください。 - P.S.これはhttp://stackoverflow.com/questions/36851365/parsing-though-xml-recursively-using-xslt/36851808#36851808 –

+0

のフォローアップと思われます。これを解決していただきありがとうございます。 – Luck

答えて

0

あなたは(のみ入力例のために働く場合があります)、これを試してください:

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" encoding="UTF-8"/> 
<xsl:strip-space elements="*"/> 
<xsl:template match="/"> 
    <table> 
    <xsl:apply-templates select="*"/> 
    </table> 
</xsl:template> 

<xsl:template match="*[text()]"> 
    <tr> 
    <td> 
    <xsl:for-each select="ancestor-or-self::*"> 
     <xsl:value-of select="name()" /> 
     <xsl:if test="position()!=last()"> 
      <xsl:text>_</xsl:text> 
     </xsl:if> 
    </xsl:for-each> 
    </td> 
    <td> 
    <xsl:value-of select="." /> 
    </td> 
    </tr> 
    <xsl:text>&#10;</xsl:text> 
    <xsl:apply-templates select="*"/> 
</xsl:template> 
</xsl:stylesheet> 
+0

そのうまくいっている – Luck

関連する問題