2016-08-11 37 views
0

XMLを読み込み可能なHTMLに変換したい。 以下私はXMLのサンプル部分を入れていますが、自分自身を変換することができず、助けが必要です。XSLTを使用して動的XMLをHTMLに変換する

XMLには、col1,col2---colxxxという名前で生成される可変数の列が含まれている場合があります。ここでITEM = Labelの場合は、その名前の前に<B>を追加しています。

<Root> 
    <row ID="1" ITEM="Label" col1="visit no"> 
    <row ID="1" ITEM="Data" col1="1"> 
    <row ID="1" ITEM="Label" col1="Date"> 
    <row ID="1" ITEM="Data" col1="8/11/2018"> 
    <row ID="1" ITEM="Label" col1="PatName" col2="DocName" col3="DocName" /> 
    <row ID="2" ITEM="Data" col1="Sam Hul" col2="Dr Mike" col3="Vegas Hospital"/> 
    <row ID="2" ITEM="Data" col1="Dan Brown" col2="Dr Matt" col3="California Hospital"/> 

を次のように

サンプルXMLは、私は以下のHTMLコンテンツに上記のXMLを変換したいです。 col1、col2、col3はループを使用して生成されています。彼らは名前を持っているので、colの後ろにインクリメンタルな数字があります。

期待される出力HTMLは、これは

<Table> 
    <tr><td><b>visit no</b></td></tr> 
    <tr><td>1</td></tr> 
    <tr><td><b>Date</b></td></tr> 
    <tr><td>8/11/2018</td></tr> 
    <tr><td><b>PatName</b></td><td><b>DocName</b></td><td><b>DocName</b></td></tr> 
    <tr><td>Sam Hul</td><td>Dr Mike</td><td>Vegas Hospital</td></tr> 
    <tr><td>Dan Brown</td><td>Dr Matt</td><td>California Hospital</td></tr> 
</table> 

である私は、これはそのが変更されたreqirementに応じて編集し、単一のTR

<tr> 
     <xsl:for-each select="row/@*"> 
        <td><xsl:value-of select="."/></td> 
     </xsl:for-each> 
    </tr> 
+0

正確にあなたはこれにこだわっていますか? –

+0

@ michael.hor257k各行ノードのcolxxxタグの数をカウントするには –

+0

なぜそれらを数える必要がありますか? - 問題が発生している問題を解決できるように、スタイルシートを投稿してください。私たちはここにあなたのコードを書くのではありません。 –

答えて

1

を---生成moment.Butsにしようとしています---

これは、テーブルを作成するには奇妙な方法ですが、それが必要な場合は、試してみてください。

XSLT 整形 XML入力に加え1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:template match="/Root"> 
    <table border="1"> 
     <xsl:for-each select="row"> 
      <tr> 
       <xsl:apply-templates select="@*[starts-with(name(), 'col')]"/> 
      </tr> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

<xsl:template match="@*[../@ITEM='Label']"> 
    <th> 
     <xsl:value-of select="."/> 
    </th> 
</xsl:template> 

<xsl:template match="@*"> 
    <td> 
     <xsl:value-of select="."/> 
    </td> 
</xsl:template> 

</xsl:stylesheet> 

(!):

XML

<Root> 
    <row ID="1" ITEM="Label" col1="visit no"/> 
    <row ID="1" ITEM="Data" col1="1"/> 
    <row ID="1" ITEM="Label" col1="Date"/> 
    <row ID="1" ITEM="Data" col1="8/11/2018"/> 
    <row ID="1" ITEM="Label" col1="PatName" col2="DocName" col3="DocName" /> 
    <row ID="2" ITEM="Data" col1="Sam Hul" col2="Dr Mike" col3="Vegas Hospital"/> 
    <row ID="2" ITEM="Data" col1="Dan Brown" col2="Dr Matt" col3="California Hospital"/> 
</Root> 

(レンダリング)結果

enter image description here

+0

答えをありがとう。しかし、わずかな問題があります。 :)そのXMLには多くのラベルがあります。このコードはすべてのヘッダーを一番上に表示しています。私はちょうどそれらがXMLであるので順序で置く必要があり、ちょうどITEM = 'Label'のところで太字にする必要があります。 –

+0

あなたの質問を編集し、複数の 'label'行の入力例と期待される出力を表示してください。 –

+0

私は質問を更新しました。助けてくれてありがとう! –

関連する問題